关于DB关系的问题

时间:2010-09-02 09:37:02

标签: database-design

我有一个员工表,我想跟踪他们的操作系统首选项。 他们可以有多个操作系统偏好:

Employee
 - ID
 - Name 
 - OS_Prefs_ID

OSTypes
 - ID
 - OperatingSystemName
 - Version

OS_Prefs
 - ID
 - OSTypes_ID

Employee和OS_Pref之间的关系是“一对多”还是“多对多”?

我猜测Employees(1)到OS_Prefs(很多),对于OSTypes和OS_Prefs,似乎它是OS_Prefs(很多)到OSTypes(1)。正确?

4 个答案:

答案 0 :(得分:1)

许多对多

非常简单地说,员工可以拥有许多操作系统,而操作系统可以拥有许多员工。

这就是为什么你需要使用包含两个ID

的第三个表的原因

答案 1 :(得分:1)

  

我猜测Employees(1)到OS_Prefs(很多),对于OSTypes和OS_Prefs,似乎它是OS_Prefs(很多)到OSTypes(1)。正确?

这就是应该的方式,使得从Employee到OSType的关系多对多

但为此你需要稍微改变你的架构:

员工

  • ID
  • 姓名

OSTypes

  • ID
  • OperatingSystemName

OS_Prefs

  • EMPLOYEE_ID
  • OSTypes_ID

答案 2 :(得分:1)

  

是员工之间的关系   和OS_Prefs“一对多”或“多对   许多“?

     

我猜员工(1)来   OS_Prefs(很多)和OSTypes和   OS_Prefs,它似乎是OS_Prefs   (很多)到OSTypes(1)。正确?

是的,没错。

顺便说一下,你真正想要建模的关系是员工< - > OSTypes。这是一种多对多的关系。由于这不能(很好地)使用两个表完成,因此使用第三个表(OS_Prefs)将多对多分解为一对多和一对多。这是一种常见的技术,称为join table

答案 3 :(得分:0)

正如我所见,一对一。

这样做:

Employee
 - ID
 - Name 

OSTypes
 - ID
 - OperatingSystemName
 - Version

OS_Prefs
 - EmployeeID
 - OSTypes_ID