【问题标题】:Normalizing mysql database规范化mysql数据库
【发布时间】:2013-07-17 20:51:12
【问题描述】:

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

以下是我尝试解释此信息的工作原理:

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

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

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

不需要子类型。

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

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

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

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

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

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

【问题讨论】:

  • 我认为在这里创建关联/关联表是个好主意。你有没有尝试过这样的事情?

标签: mysql database data-structures normalization


【解决方案1】:

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

另见我对Is storing a delimited list in a database column really that bad?的回答

正确的标准化设计是:

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

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

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

【讨论】:

  • 显然不知道我怎么没想到的。好好阅读你的其他答案,ty。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多