2

我正在创建一个数据库来存储收集卡片信息的魔法,我不知道如何规范化的一件事是卡片类型/子类型。

这是我解释这些信息如何工作的尝试:

卡片最多有 2 种类型(但我想没有什么能阻止 3 种类型的新卡片)

每张卡至少需要一种类型。

卡片最多有 3 个子类型(同上)。

不需要子类型。

所以我打算在表中有一个 typeID 和 subtypeID 字段,其中包含卡片信息

我知道将信息存储在类型和子类型表中的唯一方法是:

1 - 在我的表中有 type1、type2、subtype1、subtype2... 字段

2 - 具有字段类型和子类型,并将信息存储为:“type1,type2”,“subtype1,subtype2”

1 未标准化,因此我想避免使用它

2 我什至不知道这是否被认为是标准化的,但这似乎是个坏主意。

4

2 回答 2

0

恕我直言:实体卡具有您卡的所有字谜信息,但没有类型。另一个实体 TYPES 具有所有类型(带有 gerarchical 链接) 在另一个中间实体 CARDS_TYPES 中,您存储卡和类型之间的所有链接。

因此,如果您的 gerarchical 类型更改,您必须将这些更改放在实体 TYPES 中。因此,如果一张卡片的类型数量增加,则将新行放在中间实体中。

于 2013-07-18T18:40:39.340 回答
0

选项 1 或 2 均未标准化。它们都是与第一范式相冲突的“重复组”的例子。

另请参阅我对在数据库列中存储分隔列表真的那么糟糕吗?

正确的归一化设计是:

Types ---< CardTypes >--- Cards ---< CardSubtypes >--- Subtypes

这是一个紧凑的符号,显示类型和卡片之间的多对多表,以及卡片和子类型之间的另一个多对多表。要将多种类型添加到给定的卡片,只需将多行添加到 CardTypes 表。同样,为具有多个子类型的卡添加多行到 CardSubtypes。

这始终是表示多对多关系的规范化方式。

于 2013-07-18T18:42:46.417 回答