我有一个概念性的问题,我希望有人更精通sql数据库设计可以帮助我。我有一个表,其中每一行在其他几个表中有一个对应的行。即,表1中的行在表2、表3或表4中都有相应的行(但不能超过1…对应的行只能在其他表中的一个表中)。
建立这种结构的最佳方法是什么?如果我在表1中放置一个TabeTable ID列和一个表名列,我可以保证在其他表中只有1个对应的行,但是它看起来像是一个非常不灵活的杂乱的解决方案。另一方面,如果我只在table2、table3和table4中放一个table1\u id列,那么每次我想要找到与table1中的行对应的行时,似乎需要运行3个不同的查询,而且似乎我无法保证在table1中的三个表中,我的行只有一个条目。
有人有什么建议吗?
最佳答案
我将使用第二个解决方案,并使用触发器来确保不存在一个以上的相关行。
查询将如下所示:
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.table1_id
left outer join table3 t3 on t1.id = t3.table1_id
left outer join table4 t4 on t1.id = t4.table1_id
如果您想要的表中有一个公共列,例如
value
,您可以这样得到它:select t1.*,
coalesce(t2.value, t3.value, t4.value) as value
from table1 t1
left outer join table2 t2 on t1.id = t2.table1_id
left outer join table3 t3 on t1.id = t3.table1_id
left outer join table4 t4 on t1.id = t4.table1_id