我一直在查看数据规范化,并且不太清楚如何将其应用到我设置的卡数据库中。每张卡都来自一套,该套装有一个符号。由于这两个东西对于那个集合中的每张卡都是相同的,应该构成它自己的表吗?是否所有卡都在一个大表中,无论设置如何?
此外,是否有理由不在每个集合中使用以符号命名的表格中的卡片,只将该集合的名称放在一列中?
我是一个菜鸟,所以如果我需要更具体或只是闭嘴让我知道。提前谢谢。
答案 0 :(得分:2)
这取决于你想要的正常形式。
考虑一个看起来像这样的卡表,主键是(Name, Set)
:
Card:
| Name | Set | Symbol |
---------------------------
| Card 1 | Set 1 | 1 |
| Card 2 | Set 1 | 1 |
| Card 3 | Set 1 | 1 |
| Card 1 | Set 2 | 2 |
| Card 2 | Set 2 | 2 |
此表位于First Normal Form(1NF)。但是它不在Second Normal Form(2NF)中,因为Symbol
的值取决于Set
的值,而(Set)
是主键的正确子集。
正如您在问题中所说,如果您想要2NF,则需要创建一个单独的Set
表:
Card:
| Name | Set |
------------------
| Card 1 | Set 1 |
| Card 2 | Set 1 |
| Card 3 | Set 1 |
| Card 1 | Set 2 |
| Card 2 | Set 2 |
Set:
| Name | Symbol |
------------------
| Set 1 | 1 |
| Set 2 | 2 |
这些表现在都是2NF(和3NF,BCNF,4NF,......)。
关于问题的第二部分,你要这样做而不是在一个表中包含所有列的原因是双重的:
Set
表中的一行,而不是更新其中的所有卡集。答案 1 :(得分:1)
我不太确定我是否理解你的问题,但如果我想设置一个数据库TCG,我会有一张包含所有卡片和相应信息的表格。我会为此假设YGO牌,因为它们有点众所周知。
在'cards'表中,你有一个自动递增的'CardID',卡的名称,卡的描述,卡的符号,效果ID,级别,攻击值和防御价值。所有这些都与卡片有关。
这些集合本身位于1:1表格中,可将任意数量的牌与玩家ID相关联。
所以假设玩家ataylor在他的套装中有三只蓝眼白龙,他在那张桌子上有三个条目,都有相同的卡/玩家组合...他们每个代表其中一张牌。
那是你想知道的吗?
答案 2 :(得分:1)
我也不确定我是否理解这个问题,但我建议您将所有卡片保存在一张大表中,而不是将它们拆分成不同的表格。
您想要的是唯一识别该卡的ID(cardId)。然后有一个setId和symbolId。
然后你的牌表看起来像:
CardId中,SETID,符号ID,说明
1,1,2,一张很棒的卡
2,2,2,另一张Sweet card
您可以使该表格庞大,并能够超快速地计算/分离任何集合或符号的卡片。 然后,您只需要一个查找表来告诉您SetId 1是什么以及2是什么。