好的,我有一个项目表和一个员工表。首先,我一直很困惑如何设置PK和FK。
我有Customers表,我想要它,所以1个客户可以一次拥有多个项目。所以解决方案是将CustomerId放入Projects表并使其成为外键吗?
问题是,我希望在任何特定时间都有多名员工参与项目,显然每个项目都需要多名员工。如何在它们之间设置参照完整性?
答案 0 :(得分:1)
您需要一个额外的表格ProjectsEmployees
。它与Projects
和Employees
都有外键关系。
答案 1 :(得分:1)
您可以为Foreign Key
和Employee
表创建一个包含Project
的缓冲表,以建立many-to-many
关系。例如:
Table: ProjectAssign
PK: ProjectAssignId
FK: EmployeeId
FK: ProjectId
Unique Constraint: EmployeeId & ProjectId
这样,您可以在many-to-many
和employee
之间建立project
关系。唯一约束,以确保您没有冗余数据。
注意强>
您也可以将composite key
应用于EmployeeId
和ProjectId
,但我认为这不是一个好主意
答案 2 :(得分:0)
因此,您有1个项目,该项目可以一次与多个员工和多个客户相关。 因此,Project表是您的主表。 您可以在Employee和Customer表中将项目表的ID添加为FK。 而且,ID列的组合可以用作PI,以便在AMP之间具有均匀的行分布。 这些表是维表,我想它不会大数百万行,因此您不需要另一个关系表来存储键。 Project表将通过“一对多”关系与Employee表和Customer表连接。 Employee和Customer表将通过“多对一”关系与Project表联接。
答案 3 :(得分:0)
这类许多关系是通过桥表处理的。
您可以有一个桥接表,该表为每个客户维护多个项目,每个项目可以有多名员工参与其中。
CustomerProjectEmployee
+-------------+------------+-------------+
| CustomerID | ProjectID | EmployeeID |
+-------------+------------+-------------+
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 1 | 1 | 2 |
| 1 | 2 | 2 |
| 1 | 3 | 2 |
+-------------+------------+-------------+
在这里,对于customerID(1)的项目(1,2,3),员工(1,2)做出了贡献。