2014-02-18 34 views
1

有時,我開始製作圖表時很難看到實體和列之間的差異。我不知道它應該是一個實體還是一個專欄。例如,在某些遊戲中,如果您有用戶,並且該用戶可以自己玩,或者可以在該組中玩。你會做出這兩個不同的實體UserGroupUser如何查看實體和列之間的差異

此外,例如,如果User有他們獲得的等級,狀態和徽章是遊戲的一部分。這些會是實體還是它們只會在一個實體中成爲用戶的一部分?

回答

2

Entity可能是一個Person(如學生),Place(例如會議室名稱),Object(如圖書),Abstract Concept(如課程,訂購),可以在數據庫中表示,通常可以在您的Database成爲Table

Column(s)另一方面您使用的是Entity屬性

所以,你的情況,你有一個用戶實體和可能的列或屬性(或字段) UserIDUserLevelUserStatusBadgesPlayStatus(值可以是個人或團體)。

您的Badges雖然列可能會變成Entity如果它違反了Normalization rules

例如,如果您有此表的用戶:

Table: Users 

UserID UserName UserStatus PlayStatus Badges 
------ -------- ---------- ---------- ------ 
    1  Surefire Active  Single  Private, Warrior, Platoon Leader 
    2  FastMachine Active  Group  Private, Warrior 
    3  BeatTheGeek Inactive  Group  Private 

徽章這裏違反了1NF (1st Normal Form)Normalization規則,說,不應該有重複的組或在這種情況下,沒有多值列。所以,這可能等標準化:

Table: Users 

UserID UserName UserStatus PlayStatus 
------ -------- ---------- ---------- 
    1  Surefire Active  Single  
    2  FastMachine Active  Group   
    3  BeatTheGeek Inactive  Group   

Table: Badges 

BadgeID BadgeName 
------ -------- 
    1  Private    
    2  Indie 
    3  Warrior 
    4  Platoon Leader 
    5  Colonel 
    6  1 Star General 
    7  2 Star General 
    8  3 Star General 
    9  4 Star General 
    10  5 Star General 
    11  Hero 

Table: UserBadgesHistory 

UserID BadgeID ReceiveDate 
------ -------- ----------- 
    1   1   12/01/2013 
    1   3   12/05/2013 
    1   4   1/5/2014 
    2   1   2/5/2014 
    2   3   2/10/2014 
    3   2   11/10/2013 
+0

所以如果你剛開始做一個概念設計的圖表,你仍然會有徽章一個單獨的實體?...你製作徽章獨立的實體,因爲有多種類型的徽章? – Ris

+1

是的,在概念設計圖中,徽章是一個獨立的實體,因爲基數是一對多的,也就是說,用戶可以有一個或多個徽章(如果是強制性的)或零個或多個徽章(如果它是可選的)。 – Edper

+0

你做了我的夜晚..最後我明白我問了什麼!...很高興你在這裏提到了重複的團體..謝謝你 – Ris

1

一般情況下,一個實體都有自己的多個列(即屬性),列(或屬性)不。

在您的示例中,如果您有興趣存儲的唯一數據是用戶當前的級別,那麼級別不太可能是實體。這是因爲它只有一個名稱/編號的屬性。如果您想查找當前處於第4級的所有用戶,只需使用level = 4執行查詢。另一方面,如果您有理由添加關於關卡的額外數據,例如哪些功能與該關卡相關聯或某個特定用戶達到關卡的日期,則您需要將關卡分開實體。

Level實體將擁有一個ID,一個數字或名稱以及您需要的任何其他屬性作爲數據。

ID | Prerequisite | Ability 
----+--------------+-------------- 
1 | NULL   | May gain foos 
2 | Gain 10 foos | May gain bars 
3 | Gain 20 bars | 30 free foos 

在一個完全規範化的狀態,你會叫的UserLevel另一個實體,其中,當某個用戶獲得一個水平,你將存儲的數據有關,例如。

UserLevel實體將包含LevelID和UserID作爲外鍵(鏈接回其他實體),以及DateAchieved列用於何時達到該級別。

LevelID | UserID | DateAchieved 
---------+--------+------------- 
1  | 1  | 2014-02-01 
1  | 2  | 2014-02-01 
2  | 1  | 2014-02-05 
3  | 1  | 2014-02-09 
2  | 2  | 2014-02-11 
4  | 1  | 2014-02-13 

這顯示了用戶1和用戶2在同一天從第1級開始並以不同速率升級。

+0

正是我尋找的答案。在大多數情況下,您將擁有超過1個關卡,並在您想要追蹤任務的地方擁有更多數據。像布爾task1,task2 task3等所以是的,這將是一個實體。 – Ris

相關問題