MySQL创建表之间的结构关系
我有两个表,一个表包含项目及其属性,它们是整数: 项目表:MySQL创建表之间的结构关系,mysql,database-design,relational-database,Mysql,Database Design,Relational Database,我有两个表,一个表包含项目及其属性,它们是整数: 项目表: item_id, property_a, property_b, property_c property_a, property_b, property_c 以及另一个单行表,其中包含这些属性的允许偏差, 还有整数: 允许偏差表: item_id, property_a, property_b, property_c property_a, property_b, property_c 这是可行的,但两个表之间没有正式的关系,因
item_id, property_a, property_b, property_c
property_a, property_b, property_c
以及另一个单行表,其中包含这些属性的允许偏差,
还有整数:
允许偏差表:
item_id, property_a, property_b, property_c
property_a, property_b, property_c
这是可行的,但两个表之间没有正式的关系,因此无法确保在以任何方式修改items表时它们是同步的(除了手动或在应用程序级别处理它)
所以我的问题是-对于这种情况,什么是最佳实践?这两个表的结构之间是否可以也应该在数据库级别上建立某种关系,还是应该保持良好的状态
我的一个想法是,由于偏差是一个单行表,只需将其放在items表中,为其指定特定的虚拟项,但我看到的问题是:
--虚拟数据,不喜欢在我迄今为止干净的数据库中
--使仅与项目相关的查询复杂化
--在一张桌子上混合苹果和桔子
--如果需要多组允许偏差,则很难进行扩展我认为您需要在这里进行一点归一化 您可以采用以下方法: 项目表
id item
1 item1
id item_id, property_id
1 1 1
2 1 2
3 1 3
property_id, property_type
1 a
2 b
3 c
项目属性表
id item
1 item1
id item_id, property_id
1 1 1
2 1 2
3 1 3
property_id, property_type
1 a
2 b
3 c
允许偏差表
id item
1 item1
id item_id, property_id
1 1 1
2 1 2
3 1 3
property_id, property_type
1 a
2 b
3 c
这将允许您在引用允许偏差表和项目表本身的项目_属性表上设置FK约束。它还应该允许没有所有属性(没有空数据)的项,并且还应该允许您在出现任何新属性时添加新属性(例如属性d)
希望这有帮助
PS当你说“我的一个想法是,因为偏差是一个单列表”时,你的意思是“我的一个想法是,因为偏差是一个单行表”谢谢,是的,我指的是行,问题已编辑。我不太确定我是否完全得到了你的答案——偏差表将属性定义保存为行,这是建议吗?如果是这样的话,它的缺点是如果需要另一组偏差,这将需要一个新的列,这可能不是组织数据的最佳实践。是的。其思想是将属性定义保留为行。我的想法是,如果存在另一组允许的偏差(例如d、e和f),这意味着将在偏差表和item_属性表中插入3个新行,以填充新偏差组适用的项目。它不需要添加新列。希望这有意义!