我有兩個表,比方說它們被稱爲表A和表B.來自表B的項可以存在於A的多個實例中,並且每個A可以包含多個B,所以我有一個名爲a_b的表,它將它們鏈接在一起通過他們的主鍵。我的問題是當我定義這個關聯表時,我應該在關聯表上有一個主鍵嗎?還是不需要?只是爲了避免結束在TDWTF,這就是所有:)RDBMS最佳實踐 - 關聯表的自動生成?
2
A
回答
2
主鍵將在您的關聯表中的PK列和表B PK列。這樣,您可以確保您不會意外地在關聯表中獲取任何重複的行。
主鍵的一個主要目的是保證參照完整性。也就是說,保持表格中的數據清潔,沒有重複。這種情況下的PK將確保您在關聯表中永遠不會有2個重複的行。
0
不需要。這兩個鍵應該形成關聯表的主鍵。如果您打算做雙向導航,請考慮添加一個索引,並將鍵反轉。
0
總是需要主鍵。
但是,我想說這取決於它應該是什麼。如果您打算使用某種ORM系統(例如Hibernate),那麼最好有一個代理標識符,而這兩個外鍵(指向表A和B)應該形成一個唯一的索引。另外,如果需要從另一個表中引用這樣的關係,那麼這個代理標識符將非常方便。
2
我想你可能想使用主鍵來顯示你的意圖。例如,如果您不想要
a,b
a,b
然後,在A.a和B.b上定義的主鍵可以使其更加清晰。如果你不在意,但你有a,b和其他字段,那麼添加一個代理鍵作爲你的主鍵可能有助於給你一個統一的方式來刪除你不想要的行。否則,你將不得不刪除哪裏a = a和b = b和?然後從要刪除的行中選擇一些字段值。而用代理鍵,你可以選擇該行,並說刪除哪裏mykey = 36或什麼...
但真的這取決於商業案例。許多相交表除了兩個表的鍵之外還有某種日期範圍或與關係相關的附加字段。在現有列上定義主鍵,新的代理鍵,一些唯一索引,一些約束或甚至沒有索引都可能是有效的行動方案,具體取決於您的需要。
我會說絕對做任何事情使你的意圖最清楚。
相關問題
- 1. 動態生成JavaScript的最佳實踐
- 2. 生成表單,最佳實踐
- 3. AngularJS RDBMS數據處理最佳實踐
- 4. Clojure關聯函數的最佳實踐
- 5. 項目中自動生成的getters-setters - 最佳實踐
- 6. 引用令牌生成最佳實踐
- 7. 最佳實踐ORM
- 8. PHP聯繫表格最佳實踐
- 9. 最佳實踐
- 10. 最佳實踐
- 11. 自動更新的最佳實踐
- 12. SPL自動加載的最佳實踐
- 13. 自動部署的最佳實踐
- 14. 最佳實踐
- 15. 最佳實踐
- 16. 最佳實踐
- 17. 最佳實踐
- 18. WCF關閉最佳實踐
- 19. 最佳實踐
- 20. 最佳實踐
- 21. 最佳實踐
- 22. 最佳實踐
- 23. 最佳實踐
- 24. Swagger最佳實踐
- 25. 最佳實踐
- 26. 最佳實踐
- 27. 最佳實踐
- 28. LinqToSql最佳實踐
- 29. 最佳實踐
- 30. UITableViewCell自動佈局最佳實踐