我正在创建一个数据库来存储Magic收集卡的信息,其中一个我不知道如何规范化的是卡片类型/子类型。
以下是我尝试解释此信息的工作原理:
卡片最多有2种类型(但我认为没有什么能阻止3种类型的新卡片)
每张卡至少需要一种类型。
卡片最多有3个子类型(与上述相同。)
不需要子类型。
所以我在表格中有一个带有信息的
的typeID和subtypeID字段我知道将信息存储在类型和子类型表中的唯一方法是:
1 - 我的表格中有type1,type2,subtype1,subtype2 ...字段
2 - 具有字段类型和子类型,并将信息存储为:“type1,type2”,“subtype1,subtype2”
1没有标准化,因此我想避免使用它
2我甚至不知道这是否被认为是正常化的,但似乎是一个坏主意。
答案 0 :(得分:0)
IMHO: 实体卡具有您卡片的所有图形信息,但没有类型。 另一个实体类型有所有类型(具有地理链接) 在另一个middles实体CARDS_TYPES中,您存储了卡片和类型之间的所有链接。
因此,如果您的地理类型更改,您必须将这些更改放在实体TYPES中。因此,如果一张卡的类型数量增加,则在中间实体中添加新行。
答案 1 :(得分:0)
选项1或2均未标准化。它们都是“重复群体”的例子,与第一范式相冲突。
另请参阅我对Is storing a delimited list in a database column really that bad?
的回答正确的标准化设计是:
Types ---< CardTypes >--- Cards ---< CardSubtypes >--- Subtypes
这是一个紧凑的表示法,它显示了类型和卡片之间的多对多表格,以及卡片和子类型之间的另一个多对多表格。要向给定卡添加多个类型,只需在CardTypes表中添加多行即可。同样为CardSubtypes添加多行以获取具有多个子类型的卡。
这始终是表示多对多关系的规范化方式。