Database design DB关系问题
我有一个employees表,我想跟踪他们的操作系统偏好。 它们可以有多个操作系统首选项:Database design DB关系问题,database-design,Database Design,我有一个employees表,我想跟踪他们的操作系统偏好。 它们可以有多个操作系统首选项: Employee - ID - Name - OS_Prefs_ID OSTypes - ID - OperatingSystemName - Version OS_Prefs - ID - OSTypes_ID 员工与操作系统之间的关系是“一对多”还是“多对多” 我猜员工(1)到操作系统首选项(多个),对于OSTYPE和OSU首选项,似乎是操作系统首选项(多个)到OSTYPE(1
Employee
- ID
- Name
- OS_Prefs_ID
OSTypes
- ID
- OperatingSystemName
- Version
OS_Prefs
- ID
- OSTypes_ID
员工与操作系统之间的关系是“一对多”还是“多对多”
我猜员工(1)到操作系统首选项(多个),对于OSTYPE和OSU首选项,似乎是操作系统首选项(多个)到OSTYPE(1个)。对吗?多对多
简单地说,一个员工可以有很多操作系统,一个操作系统可以有很多员工
这就是为什么需要使用第三个表,其中包含两个ID的多对多
简单地说,一个员工可以有很多操作系统,一个操作系统可以有很多员工
这就是为什么您需要使用第三个表,它包含两个ID,正如我看到的那样 这样做:
Employee
- ID
- Name
OSTypes
- ID
- OperatingSystemName
- Version
OS_Prefs
- EmployeeID
- OSTypes_ID
在我看来,一对一 这样做:
Employee
- ID
- Name
OSTypes
- ID
- OperatingSystemName
- Version
OS_Prefs
- EmployeeID
- OSTypes_ID
我猜员工(1)到操作系统首选项(多个),对于OSTYPE和OSU首选项,似乎是操作系统首选项(多个)到OSTYPE(1个)。对吧?
这就是它应该的方式,使员工与OSType之间的关系变得多对多
但为此,您需要稍微更改您的模式:
雇员
- 身份证
- 名字
- 身份证
- 操作系统名
- 版本
- 雇员身份证
- OSTypes_ID
- 身份证
- 名字
- 身份证
- 操作系统名
- 版本
- 雇员身份证
- OSTypes_ID
顺便说一句,你真正想要建立的关系是员工类型。这是一种多对多的关系。由于这不能(很好地)用两个表完成,因此使用第三个表(OS_Prefs)将多对多分解为一对多和一对多。这是一种常见的技术,称为a。是的,你是对的。一名员工有许多操作系统偏好。而且很多OSTYPE都有很多首选项,只要你是对的。一名员工有许多操作系统偏好。而且很多OSTYPE都有很多偏好如果一个员工可以有多个偏好,那么就永远不会是一对一的。除非你完全忽略了所有的标准。如果一个员工可以有多种偏好,那么它永远不会是一对一的。除非您完全忽略了所有的规范和OS_Prefs,否则它不需要主键,因为这不会提供任何额外的信息,对吗?我会将employee_id+ostype_id作为主键。m:n映射表是我接受组合主键的少数例外之一。对于OS_Prefs,它不需要主键,因为这不会提供任何额外信息,对吗?我会将employee_id+ostype_id设置为主键。m:n映射表是我接受组合主键的少数例外之一。