【发布时间】:2020-08-14 03:41:49
【问题描述】:
我正在构建一个包含以下两个表的 Postgres 数据库:
项目(id、startDate 等...) 和 员工(身份证、姓名等)
我想跟踪员工为项目添加的贡献类型。例如,员工 #1 可能是项目 1 的“工程师”和项目 2 的“经理”。我也不想限制员工可以为某个项目做出的贡献数量。因此,员工 #1 可以同时是单个项目的“工程师”和“经理”。
我的第一直觉是在两个名为 ProjectEmployees 或其他东西之间建立多对多关系,并将 projectId、employeeId 和 contributionType 存储为字符串,该字符串仅采用枚举中的值而不必处理有拼写错误或任何相关问题。
我的主要问题是这是否是一种不好的做法。我的另一个想法是将每种贡献类型拆分到自己的表格中。因此,不会有 EmployeeProjects 表,而是会有 ProjectEngineers、ProjectManagers 等表......并且不会将contributionType 存储为列,而是隐含在我正在使用的表中,并且该表只需存储项目 ID 和员工 ID。该数据库中有更多表具有类似的关系,其中不同表之间存在多对多关系,但每个关系都可能是许多“类型”关系中的一种。将这些全部拆分为每种关系类型的单独表是否更明智?还是像我的第一个想法那样在更通用的表中跟踪关系类型更好?
我想要的结果是能够有效地查看员工从事的所有项目贡献(和类型),以及查看项目的所有贡献者 + 贡献者类型。
【问题讨论】:
标签: postgresql database-design relationship