做出带有值的枢轴 table 的错误选择吗?

Is bad choice making pivot table with values?

我对设计新数据库 table 有疑问。是否可以像 ID 一样存储数据?

假设我有一个 table,其中:

ID   type
1    client_id
2    item_id
3    price
4    date

像这样 table 会出什么问题:

ID   transaction   foreign_id   data
1    222           1            14
2    222           2            25
3    222           3            5
4    222           4            5/17/2020
5    528           1            14
6    528           2            187
7    528           3            
8    528           4            5/16/2020 

等等

我要制作一个更大的数据库,其中可能超过 20 列。我在想这是否是一个(更好的)解决方案。这个结构有什么可能出错的地方吗?

PS:Postgre 数据库

您描述的是实体-属性-值模型。

我实际上不会推荐这个,因为它有很多陷阱,例如:

  • 属性名称的完整性无法强制执行(如果有人创建了一个名为 id_client 的新属性,而 client_id 已经存在怎么办?)

  • 所有值都存储在一个列中,因此您不能为每个属性使用正确的 sql 数据类型(如果有人设置日期 2020-00-00 怎么办?)

  • 不可能强制执行强制属性的概念,或任何其他类型的约束

另一方面,通过创建具有相关列数、适当数据类型和 not null 约束的 table 可以正确管理上述所有要点。 20 列并不多 - 使用关系 table 时,替代解决方案是可能的,例如继承。