我已經碰到了一個路障,我需要列出所有當前課程的學生和教師,我有2個表中的一個叫做學生,第二個叫做課程。我正在考慮爲學生創建一個名爲課程的領域,然後用逗號分隔條目,以便我可以使用WHERE IN子句,但爲每個學生創建一個表格要容易得多。爲每個學生創建一張桌子。它被認爲是一種不好的做法?
1
A
回答
2
我想創造學生稱爲課程字段,然後用逗號
壞主意分離的條目,而你肯定不是第一個擁有它。
創建每個學生的表更容易
更糟糕的想法,你肯定不是第一個擁有它。
不要創建數據庫結構,要求您從解散的Blob中解析信息。並且絕對是不會創建數據庫結構,每次數據更改時都會要求您更改結構。
你所描述的,Student
和Course
之間的關係稱爲多對多關係。要實現它,你需要的只是兩個實體之間的「鏈接表」。考慮這樣的事情:
Student
----------
ID (PK)
Name
Course
----------
ID (PK)
Name
足夠簡單的表示這兩個實體。現在,所有你需要的是第三個表將它們連接在一個多一對多的關係:
StudentCourse
----------
ID (PK)
StudentID (FK)
CourseID (FK)
有幾件事情需要注意:
- 表的名稱並沒有跟隨這個慣例,這只是一個普遍的做法。你可以稱它爲任何你喜歡的。隨着它成長爲自己的實體,它可能是一個很好的名字。
- 這不是需要它自己的
ID (PK)
,它的主鍵可能是兩個外鍵的組合(因爲它們的每一對在這個域中也應該是唯一的)。 - 如果它擁有更多的數據而不僅僅是關係,它可以快速成長爲自己的實體。例如,如果在一門課程中有關於學生註冊的具體信息,這些信息是特定於這兩者的組合的,但並非特定於任一實體本身。某種類型的註冊號碼,註冊日期/時間等。該表格將成爲它自己的實體以及其他兩個實體,不僅僅是一個結構鏈接表。
+0
感謝您的幫助 –
4
由於您有多對多映射,請考慮使用鏈接表,其中包含student_id
和course_id
列。
+0
感謝您的幫助 –
相關問題
- 1. 您是否認爲ASP.NET WebForms是一種不好的做法?
- 2. 爲什麼在bean中創建受保護的屬性被認爲是一種不好的做法?
- 3. 保持交易開放被認爲是一種不好的做法?
- 4. 在一個控制器中創建兩個不同表的記錄被認爲是不好的做法嗎?
- 5. 爲iPhone開發使用界面生成器是否被認爲是一種好的做法?
- 6. 使用clojure的stm作爲一個全球性的國家被認爲是一種好的做法?
- 7. 在非Rails寶石中使用ActiveSupport被認爲是一種好的做法嗎?
- 8. 認爲是好的做法?
- 9. 這是更好的每個用戶有一張桌子或只是一排
- 10. 爲什麼$在cakePHP中被認爲是不好的做法?
- 11. lua:正在宣佈一張桌子來「託管」所有圖形元素是一種不好的做法?
- 12. 爲什麼將一列添加到已經創建的表中被認爲是不好的做法?
- 13. 創建和發送自定義Javascript事件被認爲是一種好的做法嗎?
- 14. 鎖定可變對象 - 爲什麼它被認爲是不好的做法?
- 15. 正在創建一個被認爲是抽象的方法嗎?
- 16. 這是否被認爲是一個馬虎的做法呢?
- 17. 什麼是最好的:幾張桌子還是一個很大的桌子?
- 18. Javascript爲什麼FOR IN是一種不好的做法?
- 19. 並排顯示一張桌子,一個iframe和一張桌子
- 20. 在域模型中實例化一個集合被認爲是一種好的做法嗎?
- 21. 爲什麼在C++的函數中創建一個對象是一種不好的做法?
- 22. 傳遞變量另一種觀點認爲:最好的做法
- 23. 動態創建表作爲分區的一種方式:好還是壞做法?
- 24. 爲什麼在每個I/O操作中創建Stream的新實例是一種很好的做法? (C#)
- 25. 爲什麼是一種「不穩定的那種」認爲是不好的
- 26. 使用html'confirm'方法是否被認爲是良好的做法?
- 27. 重載邏輯運算符被認爲是不好的做法?
- 28. 使用document.on()會被認爲是不好的做法嗎?
- 29. 混凝土類注入被認爲是不好的做法
- 30. ViewModel對象持有Dispatcher被認爲是不好的做法嗎?
是的。 「m到m」是你搜索的流行詞:D –
做一個「參加」表,將學生加入課程 – Blag
你爲什麼要用逗號分隔數據庫中的東西?使用更多列... – Piglet