2016-05-15 314 views
0

請幫我進一步瞭解many to many的關係。假設我有老師和學生表,並且我的理解是one-to- many多對多關係

教師

TeacherId Primary Key 
TeacherName 

學生

StudentId Primary Key 
TeacherId Foreign Key 
StudentName 

TeacherId可以在學生表中出現多次。 我很困惑,因爲學生可以有很多老師。

  1. 我什麼時候可以說什麼是one-to-many什麼時候是many to many

我可以說一個學生可以有很多老師

另一方面,我也可以這樣說一個老師可以有很多的學生。

  • 如果兩個一個教師和一個學生可以有許多學生(教師),許多教師(學生)。我應該如何構建表格?
  • 是師生關係或反之亦然many-to-many
  • 我明白,一旦我正確識別了這些關係,我就可以更容易地決定創建多少個表或者是否需要創建連接表。從我在線閱讀的教程和信息來看,它說如果關係是many-to-many,我應該創建一個join-table。所以我認爲它應該看起來像這樣。

    教師

    TeacherId Primary Key 
    TeacherName 
    

    學生

    StudentId Primary Key 
    StudentName 
    

    Teacher_Student(連接表)

    Id Primary Key 
    TeacherId PRIMARY KEY 
    StudentId --took PKs of both Student and Teacher table. 
    

    是有條件很容易識別關係,也許如果它依賴於一張桌子?

    我會很感激任何解釋。我剛開始學習這個。

    謝謝。

    +0

    在上例中,teacher_student表可以有一個'id'作爲單個主鍵,然後'teacherid'和'studentid'是它們各自實體的外鍵。您也可以刪除'id'字段,並將'teacherid'和'studentid'一起用作複合主鍵(兩者仍然是外鍵)。 – sgeddes

    +0

    它看起來像你已經回答你的問題,並理解這個答案。如果可能的話,試着理解*爲什麼Teacher_Student存在(可能是因爲他們在一個類中註冊)並且爲該對象建模,而不是在原因之外手動創建關係。可能是因爲生成的對象具有不同的名稱,但具有完全相同的結構。它仍然在語義上有用。 –

    +0

    謝謝大家的意見。我很感激。 – p3ace

    回答

    1
    1. 我認爲最簡單的方法來識別一個一對多的關係,是把它在邏輯上例如一本書可以有很多頁,但一個頁面不能有很多書。以你的學生和老師爲例,你有理由認爲這是一種多對多的關係。

    2. 表格結構應如上所列,爲學生和教師提供一張表格 - 所有元數據例如名稱等等。然後,您可以使用鏈接/連接表將多對多關係變爲兩個 - 一對多關係。

    在一個側面不是你上面的例子中列出了TeacherId作爲Teacher_Student(連接表),這是不對的主鍵 - 這應該是兩個外鍵與主Id字段或複合主鍵連接在teacherid和studentid之間 - 這消除了在連接表上需要Id字段。

    1. 是的這種關係在大多數情況下可以被認爲是多對多的,因爲從邏輯上思考一個學生可以有不同的科目的教師,一個教師可以有一個班級的多個學生。 可能出現的情況是,可能存在一些特殊情況,如果教師只有一名學生或學生只有一個班級 - 這些仍然可以用您的連接表建模,因此最好處理所有情況,然後設計一個限制表結構不能擴展。

    希望幫助^^

    +0

    謝謝回答每個編號的問題。大多數時候它幫助我更好地理解每個子問題是否得到解答。當你說「teacherid和studentid之間的複合主鍵」時,我還沒有找到一個部分 – p3ace

    +0

    複合鍵或複合鍵替換了id字段和多個唯一標識該字段的列,例如studentid和teacherid變爲複合Id字段在這裏看到答案http://stackoverflow.com/questions/1110349/how-can-i-define-a-composite-primary-key-in-sql – Chris

    0

    通常多對多的關係被確定ER圖上

    說明在一個良好的方式的關係,這樣你就不需要爲很多人創造表許多關係

    您可以創建例如課程表

    具有這些屬性(CRN數通常整,學生證,教師證,主題,日期和時間

    注:日期和時間是可選的,我只是澄清你怎麼會

    我希望我能幫助你:)

    +0

    感謝您的建議。我會盡力深入研究ERD。 – p3ace

    0

    表有像Teacher_Student兩國外交重點領域表

    StudentId Foreign Key 
    TeacherId Foreign Key 
    
    +0

    感謝您的回答。 – p3ace

    +0

    我不同意這個理想情況應該是一個複合鍵而不是兩個外鍵,以防止添加重複項。 – Chris