DB世界不是我的,所以也许这个问题很简单
想象一下,设计一个存储来自不同类型项目(如数据类型)的数据的数据库
我不知道应该怎么做,但这就是我制作它的方式
id | quantity | price ... Kind | ID_k_foreing |
然后对于每种类型的项目都是具有每种类型属性的表格
所以通过软件我可以比较那种,然后连接到适当的表
像这样的伪代码switch(kind)
{
case chess_game:
the join is made with a table like this:
id_k| material | length | weigth ..
case car_toy:
the join is made with a table like this:
id_k| color | velocity | remote_control ...
case doll:
the join is made with a table like this:
id_k| name | height | clothes ..
...
}
在结构中有一些解决这种“数据类型”问题的标准方法 没有添加棘手的软件功能?
感谢
答案 0 :(得分:4)
您可能需要查看此question。
Bill Karwin的answer以这种方式打破了它。
您至少有这五个选项 用于建模您的类型层次结构 描述:
Single Table继承:一个表 对于所有产品类型,足够 用于存储所有属性的列 类型。这意味着很多列, 任何给定的大多数都是NULL 行。
Class Table Inheritance:一张桌子 产品,存储共同的属性 所有产品类型。然后每张一张桌子 产品类型,存储属性 特定于该产品类型。
Concrete Table Inheritance:没有桌子 用于常见的Products属性。 而是每个产品类型一个表, 存储两种常见产品 属性和特定于产品 属性。
Serialized LOB:一张桌子 产品,存储共同的属性 所有产品类型。一个额外的专栏 存储半结构化数据的BLOB, 在XML,YAML,JSON或其他一些 格式。这个BLOB允许你存储 每个特定的属性 产品类别。你可以使用花哨的设计 用于描述此类的模式,例如 门面和纪念品。但不管你 有一大堆不能的属性 在SQL中轻松查询;你有 将整个blob取回到 应用并在那里进行分类。
Entity-Attribute-Value:一张桌子 产品,和一个枢轴的表 属性为行,而不是 列。 EAV不是有效的设计 关于关系 范式,但很多人使用它 无论如何。这是“属性 模式“由另一个答案提到。 使用eav标签查看其他问题 在StackOverflow上的一些 陷阱。
你必须找出哪一个适合你。