可选结构sql

时间:2010-12-06 18:47:24

标签: sql sqlite entity-relationship relational-database

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 ..

...

}

在结构中有一些解决这种“数据类型”问题的标准方法 没有添加棘手的软件功能?

感谢

1 个答案:

答案 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上的一些   陷阱。

你必须找出哪一个适合你。