Database-Design

嘗試為電子競技團隊設計數據庫 - 依賴關係問題

  • June 20, 2015

我正在嘗試在 Access 中為電子競技聯盟(特別是北美英雄聯盟)設計一個數據庫。我會發布我所擁有的,然後解釋我的問題。

目前的ER圖

當我嘗試規範化 TEAMROSTER 和 PLAYERNAME 時,我的問題就出現了。每個球員只能屬於一個球隊,但每個球隊都有 5 個球員在你看到我在 TEAMROSTER 中列出的 5 個位置。我不確定當我嘗試創建關係模式時是否允許這樣做。我將發布我創建的架構。

關係模式

我不確定這是否正確,因為我試圖將這些表關聯在一起,但我真的不明白我應該如何做到這一點。這是我嘗試創建的第一個數據庫。

恕我直言,這不是好的設計。 您在聯賽表和球隊表中有隊名。

混合約定也不好(表名的複數和單數)

我要注意的是,您還應該在這些欄位上設置唯一索引:上單、打野、中路、ADC、輔助。

create unique index teamroster_unique_idx on (toplane, jungler, midlane, adc, support);

這對 PostgreSQL 有效,請查看您的 RDBMS 文件。

並且還要檢查每個值都不同的約束,您不希望所有位置都有相同的玩家。;)

唯一索引是具有唯一組合(無重複),並檢查約束以具有所有不同的值。

PS。您很好地創建了邏輯設計,但您需要將其轉換為物理設計

(在您的 RDBMS 中創建)

那麼數據庫設計是好的。但我建議進行一項更改。

Teamroster我建議不要在and之間直接連接Player,而是建議這種設計:

桌上播放器

id (PK)
PlayerName
...

id (PK)
TeamName
...

表:PlayerTeamPositions

team_id (PK) (FK references table teams)
player_id (PK) (FK references table players)
position_id (FK references table positions)

表:職位

id (PK)
PositionName
...

您可以在PlayerTeamPositions表上創建一個組合的唯一主鍵,這將防止一名球員被放置在同一支球隊的兩個不同位置上。但是同一名球員可以在另一支球隊擔任另一個職位。

如果這不是故意的,您可以另外添加另一個連接表,以防止將一個玩家添加到兩個不同的團隊。

但是通過這種數據庫設計,您將立即在您的數據庫系統中而不是在您的應用程序中防止許多情況(這可能會失敗)。

引用自:https://dba.stackexchange.com/questions/104633