做出带有值的枢轴 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 时,替代解决方案是可能的,例如继承。
我对设计新数据库 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 时,替代解决方案是可能的,例如继承。