有时,我开始制作图表时很难看到实体和列之间的差异。我不知道它应该是一个实体还是一个专栏。例如,在某些游戏中,如果您有用户,并且该用户可以自己玩,或者可以在该组中玩。你会做出这两个不同的实体User
和GroupUser
?如何查看实体和列之间的差异
此外,例如,如果User
有他们获得的等级,状态和徽章是游戏的一部分。这些会是实体还是它们只会在一个实体中成为用户的一部分?
有时,我开始制作图表时很难看到实体和列之间的差异。我不知道它应该是一个实体还是一个专栏。例如,在某些游戏中,如果您有用户,并且该用户可以自己玩,或者可以在该组中玩。你会做出这两个不同的实体User
和GroupUser
?如何查看实体和列之间的差异
此外,例如,如果User
有他们获得的等级,状态和徽章是游戏的一部分。这些会是实体还是它们只会在一个实体中成为用户的一部分?
Entity
可能是一个Person
(如学生),Place
(例如会议室名称),Object
(如图书),Abstract Concept
(如课程,订购),可以在数据库中表示,通常可以在您的Database
成为Table
。
Column(s)
另一方面您使用的是Entity
的属性。
所以,你的情况,你有一个用户实体和可能的列或属性(或字段) UserID
,UserLevel
,UserStatus
,Badges
,PlayStatus
(值可以是个人或团体)。
您的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
一般情况下,一个实体都有自己的多个列(即属性),列(或属性)不。
在您的示例中,如果您有兴趣存储的唯一数据是用户当前的级别,那么级别不太可能是实体。这是因为它只有一个名称/编号的属性。如果您想查找当前处于第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级开始并以不同速率升级。
正是我寻找的答案。在大多数情况下,您将拥有超过1个关卡,并在您想要追踪任务的地方拥有更多数据。像布尔task1,task2 task3等所以是的,这将是一个实体。 – Ris
所以如果你刚开始做一个概念设计的图表,你仍然会有徽章一个单独的实体?...你制作徽章独立的实体,因为有多种类型的徽章? – Ris
是的,在概念设计图中,徽章是一个独立的实体,因为基数是一对多的,也就是说,用户可以有一个或多个徽章(如果是强制性的)或零个或多个徽章(如果它是可选的)。 – Edper
你做了我的夜晚..最后我明白我问了什么!...很高兴你在这里提到了重复的团体..谢谢你 – Ris