Database design DB关系问题

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

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

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

  • 身份证
  • 操作系统名
  • 版本
优惠券

  • 雇员身份证
  • OSTypes_ID
我猜员工(1)到操作系统首选项(多个),对于OSTYPE和OSU首选项,似乎是操作系统首选项(多个)到OSTYPE(1个)。对吧?

这就是它应该的方式,使员工与OSType之间的关系变得多对多

但为此,您需要稍微更改您的模式:

雇员

  • 身份证
  • 名字
OSTypes

  • 身份证
  • 操作系统名
  • 版本
优惠券

  • 雇员身份证
  • OSTypes_ID
员工之间的关系是什么 OS_首选“一对多”或“多对多” 很多“

我猜员工(1)应该 OS_首选项(多个)和OSTYPE和 好的,看来是好的 (许多)到OSTYPE(1)。对吧?

是的,没错

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

员工之间的关系是什么 OS_首选“一对多”或“多对多” 很多“

我猜员工(1)应该 OS_首选项(多个)和OSTYPE和 好的,看来是好的 (许多)到OSTYPE(1)。对吧?

是的,没错


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

是的,你是对的。一名员工有许多操作系统偏好。而且很多OSTYPE都有很多首选项,只要你是对的。一名员工有许多操作系统偏好。而且很多OSTYPE都有很多偏好如果一个员工可以有多个偏好,那么就永远不会是一对一的。除非你完全忽略了所有的标准。如果一个员工可以有多种偏好,那么它永远不会是一对一的。除非您完全忽略了所有的规范和OS_Prefs,否则它不需要主键,因为这不会提供任何额外的信息,对吗?我会将employee_id+ostype_id作为主键。m:n映射表是我接受组合主键的少数例外之一。对于OS_Prefs,它不需要主键,因为这不会提供任何额外信息,对吗?我会将employee_id+ostype_id设置为主键。m:n映射表是我接受组合主键的少数例外之一。