最初我的DB,[Property]和[Employee]中有两个表。
每位员工都可以拥有一个“家庭财产”,因此员工表中有一个属性的HomePropertyID FK字段。
后来我需要对这种情况进行建模,尽管只有一个“家庭财产”,但员工确实在多个房产工作或覆盖多个房产。
所以我创建了一个[Employee2Property]表,其中包含EmployeeID和PropertyID FK字段来模拟这种多对多关系。
现在我发现我需要在员工和财产之间创建其他多对多关系。例如,如果有多个员工是属性的经理,或者是多个员工,他们在房产等处执行维护工作。
我的问题是:
感谢您的任何建议:)
答案 0 :(得分:2)
这是一个非常有效的问题。答案是:它取决于
以下内容建议使用单个“键入的”M:N关系:
如果这些陈述更加错误,那么你最好使用不同的关系。
答案 1 :(得分:0)
两个注意事项应该指导您的选择。
潜在关联类型列表的静态程度如何?你已经不得不添加新的,所以似乎这里的答案可能是 - 不是很好。如果此列表有可能增长,请坚持选择B(一个附加FK的表到AssociationType表)
这些数据的访问模式可能是什么?如果需要访问与所有其他类型隔离的各种类型的关联,那么多个表可能会更好。但我只会做这个关联类型列表也非常静态
答案 2 :(得分:0)
Create Table Employee
(
Id int not null Primary Key
, ....
)
Create Table Property
(
Id int not null Primary Key
, ....
)
Create Table Role
(
Name varchar(10) not null Primary Key
, ....
)
在角色表中,您可以输入“经理”等内容。
Create Table PropertyEmployeeRoles
(
PropertyId int not null
, EmployeeId int not null
, RoleName varchar(10) not null
, Constraint FK_PropertyEmployeeRoles_Properties
Foreign Key( PropertyId )
References dbo.Properties( Id )
, Constraint FK_PropertyEmployeeRoles_Employees
Foreign Key( EmployeeId )
References dbo.Employees( Id )
, Constraint FK_PropertyEmployeeRoles_Roles
Foreign Key( RoleName )
References dbo.Roles( Name )
, Constraint UK_PropertyEmployeeRoles Unique ( PropertyId, EmployeeId, RoleName )
)
通过这种方式,同一名员工可以在同一财产上担任多个角色。这种结构不适用于您需要保证只有一个项目(例如HomeProperty)的情况,但允许您扩展员工可能拥有的与给定属性相关的角色列表。