2010-09-02 73 views
0

我有一個僱員表,我想跟蹤他們的操作系統的喜好。 他們可以有不止一個操作系統的偏好更多:問題上DB關係

Employee 
- ID 
- Name 
- OS_Prefs_ID 

OSTypes 
- ID 
- OperatingSystemName 
- Version 

OS_Prefs 
- ID 
- OSTypes_ID 

是「多一個」,「多對多」的員工和OS_Prefs之間的關係還是? (1)OS_Prefs(很多)和OSTypes和OS_Prefs,它似乎是OS_Prefs(很多)OSTypes(1)。對?

+0

是的,你是對的。一名員工有許多操作偏好。而許多ostypes有許多偏好 – corroded 2010-09-02 09:39:45

回答

1

我猜測,員工(1)OS_Prefs(許多)和OSTypes和OS_Prefs,它似乎是OS_Prefs(很多)來OSTypes(1) 。對?

這是事情應該是這樣,使得從員工的關係OSTYPE許多一對多

但是,你需要改變你的架構一點:

員工

  • ID
  • 名稱

OSTypes

  • ID
  • OperatingSystemName

OS_Prefs

  • EMPLOYEE_ID
  • OSTypes_ID
+0

和OS_Prefs,否則它不需要主鍵,因爲它不會提供任何額外的信息,對嗎? – NinjaCat 2010-09-02 10:35:47

+0

我會使employee_id + ostype_id成爲主鍵。 m:n映射表是我接受組合主鍵的少數例外之一。 – 2010-09-02 11:08:28

1

許多一對多

簡單說來,員工可以有很多operatingsystems和操作系統可以有很多員工。

這就是爲什麼你需要使用包含兩個ID的

0

一對一的,因爲我看到了第三個表。

使它這樣:

Employee 
- ID 
- Name 

OSTypes 
- ID 
- OperatingSystemName 
- Version 

OS_Prefs 
- EmployeeID 
- OSTypes_ID 
+0

如果員工可以有多個偏好,它永遠不會是一對一的。除非你完全忽略所有的規範 – 2010-09-02 09:40:32

1

員工 與OS_Prefs「一對多」還是「多到 許多」之間的關係?

我猜測,員工(1) OS_Prefs(許多)和OSTypes和 OS_Prefs,它似乎是OS_Prefs (很多)來OSTypes(1)。對?

是的,正確的。

順便說一句,你真正試圖建模的關係是Employees < - > OSTypes。這是一個多對多的關係。由於這不能(很好地)用兩個表完成,所以使用第三個表(OS_Prefs)將多對多分解爲一個一對多和一個多對一。這是一種常見的技術,稱爲join table