Mysql
避免使用多對多關係
我有 3 個表,員工、語言、員工語言。
現在,Employee 表是一個配置文件表。沒什麼特別的(身份證、名字、姓氏等)。
語言表有兩列:語言 ID 列和語言名稱列。這張表,基本上是所有語言的列表。
Employee Languages 由三列組成:Employee ID、Language ID 和 Proficiency。
因此,當我想顯示員工語言時,我必須獲取語言 ID,然後將該 ID 與語言名稱相關聯,然後將其顯示給最終使用者。
我目前正在考慮使用兩個表的新場景:
首先是 Employee 表。
其次是員工語言,包括員工 ID、語言名稱和熟練程度。
因此,語言名稱和熟練程度將在前端填充並顯示為下拉列表。
我的問題是哪種情況在我的情況下會更有效?
您的 2 表設計方法可以使用視圖來實現。這不會損害您基於 3 個表的基礎數據庫設計。
視圖未得到充分利用,但通常可以提供所有世界中最好的。
擴展:
從您的“規範化”3 表設計(看起來不錯)中,您將創建視圖(選擇員工 ID、語言名稱、員工熟練程度、語言、員工語言 WHERE 等)。然後您的應用程序從視圖中進行選擇。
3 個表最好,原因如下。
- 您有一個查找表,從查找表中提取數據更快。
- 您可以擴展員工表而不用擔心對語言表的影響
- 您可以擴展語言表而不用擔心對員工表的影響。
您可以在查找表上應用兩列鍵,使員工 John Doe 無法學習兩次英語。