【问题标题】:Person -> Details database structure人员 -> 详细信息数据库结构
【发布时间】:2009-10-04 21:20:43
【问题描述】:
我有一个域模型:
员工:ID、名字、姓氏、性别、出生日期。
办公室:Employee、WorkStation、OfficeName 等。
联系人:员工、手机、电子邮件等...
但我不确定我当前的数据库结构。如何正确:Employees 表有一个 PK EmployeeID,Offices 和 Contacts 表有它们自己的 ID 和对 Employees 表的引用,或者,Employees 表有它的 EmployeeID,并且还通过 OfficeID 和 ContactID 保持对 Offices 和 Contscts 的引用?
【问题讨论】:
标签:
database-design
data-modeling
【解决方案1】:
为了保持合理的正常形式,您的员工应该参考办公室。
假设联系人的关系是员工有一组联系人并且没有其他员工共享这些联系人,那么正确的关系应该是联系人指的是员工。
员工:empid、officeid
办公室:officeid
联系人:empid、contactid
【解决方案2】:
如果 Office 和 Contact 表中的数据只是增强有关 Employee 的信息,我将使用 EmployeeID 作为 Employee 的主键和外键。这模拟了 1 到 0..1 的关系。
Employee:EmployeeID 作为主键
办公室和联系人:EmployeeID 作为 Employee 的主键和外键
【解决方案3】:
您的模型没有明确说明员工、办公室和联系人之间的关系。
具体来说,这些关系是一对一、一对多还是多对多?对要建模的关系进行编目后,数据库的外键结构就会变得清晰。