2014-02-18 33 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

相关问题