我有一個幻想足球比賽的數據庫。 有三種模式:數據庫設計建議(具體示例 - 幻想足球)
- AFL(與澳大利亞橄欖球聯盟實體)
- DDHP(與當地的幻想競爭實體)和
- DBO(對於沒有具體要麼擁有的實體)。實體
- 每個玩家扮演一個AFL隊(有沒有需要通過時間來跟蹤這一點,所以如果玩家我只是記錄了目前球隊的球員效力於,並更新此的
說明改變俱樂部)。
- 一些球員參加ddhp球隊比賽。這是由具有FromRound和ToRound的合同表示的,表示合同有效的時間界限。
- 有回合。 afl和ddhp之間基本上沒有區別,所以只有一張桌子。
- 有固定裝置,代表兩個ddhp球隊在一回閤中互相對抗。
- 當玩家在一輪中玩,他們記錄統計。
- 每輪,每個ddhp團隊從他們的簽約球員中選擇那些將爲他們效力的球員。這由RoundPlayers表示。
問題是RoundPlayers和Stats之間存在一定程度的尷尬。從邏輯上講,RoundPlayer在統計中有一排代表他們在該回閤中的出場(如果他們出場)。這是一對一的關係,但兩個表都是可選的。玩家可能不會在一輪中玩,因此沒有統計。玩家可能也不會被選爲RoundPlayer,因此該表中沒有行。一個由Round和PlayerId鍵入,另一個由Round和ContractId鍵入。從一個導航到另一個有點尷尬,特別是當試圖使用ORM(例如實體框架4),因爲導航屬性基於外鍵,而這種關係通過中間表(合約)來獲得PlayerId。
我想過把ContractId添加到Stats(如果玩家被選中去玩那個回合)但是覺得不對。我也考慮過去除Stat和Roundplayer之間的1對1關係,並將它們移動到一張桌子上,但這也是錯誤的。
我很感激任何關於如何獲得RoundPlayer和Stat之間更好的關係的想法,甚至可能完全改變這種結構的任何想法。
感謝周杰倫,我很樂意發表評論,甚至很晚。儘管通過其他方法減輕了這個問題,但問題仍然存在。 (a)在Stats之前,RoundPlayers不存在。它們是在不同的時間創建的。並非所有的Stats都有一個RoundPlayer。 (b)不起作用,因爲並非所有Stats都有RoundPlayer。當我說有一對一的關係時,我發現我的問題並不清楚,稍後再編輯:) – Simon 2013-05-03 14:45:08