2012-11-11 221 views
0

我在SQL Server數據庫的邏輯設計中遇到問題。多對多關係與一對多關係有什麼區別?

我仍然不能明顯這關係必須是一個一對多的,哪一個必須是多到很多。 有人告訴我,如果兩個實體表都是獨立的,它們可以具有多對多的關係,否則它們將具有一對多的關係。

但現在我的工作是收集員工的個人信息,在一個部分中有被稱爲JobStatus表這對人員的當前任務的項目。這個表與Person(表)有關係,它是多對多的,當然它們之間有一個聯結表。

我做這種類型的關係,因爲一個工作職位的名稱被分配給幾個人,用不同的表現。

例如:

Person A ----->Operator 
Person B------>Operator and so on... 

而在另一邊也有一些情況下,一個人有兩個工作位置,我的意思是,他要麼是一個導演和老師。

例如:

Person C ------>Director & Teacher 

所以,請你指導我在這曖昧的邏輯是什麼意思?

+0

以及有什麼挑戰或問題? – codingbiz

+0

我不知道這是否正確?我的意思是它們之間有多對多的關係 –

回答

1

簡單地說,你會認識到多對多當任一表不能有從另一個表的PK作爲其外交重點

以一個學生和課程表

  • 學生可以採取許多課程
  • 課程可以屬於多個學生

學生把課程的FK(CourseID)將學生限制在一架C ourse

上當然把學生的FK(StudentID)將限制過程中一個學生

爲了解決這個問題,第三個表StudentCourse將具有StudentID和CourseID,因此使獨立任何一個表。

這是多對多。

對一對多,這種情況發生的時候,你可以很容易地把一個表中的ID與其他的FK。

就你而言,兩名員工可以同時成爲操作員,一名員工可以成爲操作員和老師 - 該設計很多。 EmployeeTable中,jobType和jobAssignment:你根據你描述的,我將創建三個表的項目是正確的

2

。爲每個員工提供一個唯一的ID(主鍵)併爲每個作業分配一個唯一的ID(主鍵),並讓jobAssignment表成爲將employeeTable與jobAssignment錶鏈接起來的粘合劑。 jobAssignment表將在employeeID和jobID上有一個索引。

jobAssignment 
--------------- 
employeeID (indexed) 
jobID (indexed) 


employeeTable 
--------------- 
employeeID (primary key) 
employeeName 


jobType 
--------------- 
jobID (primary key) 
jobName 
jobDescription 

這樣一來,就可以跟蹤員工,並在jobAssignment表各自的工作崗位的無論多少工作說明如何分配給每個員工。

+0

基於Marc的表設計,誰有特定工作的SQL示例:SELECT DISTINCT EmployeeID FROM employeeTable AS E RIGHT JOIN jobAssignment AS JA ON E.employeeID = JA.employeeID WHERE JA.jobID ='您想要的工作'。 – Pete855217