我有3个表,它们都具有相同的结构:
// table1 // table2 // table3
+----+------+ +----+------+ +----+------+
| id | name | | id | name | | id | name |
+----+------+ +----+------+ +----+------+
| 1 | jack | | 1 | ali | | 1 | peter|
+----+------+ +----+------+ +----+------+
嗯,我想知道,我目前的结构是更好还是一个集成的表以及一个额外的列?像这样的东西:
+----+------+-------+
| id | name | which |
+----+------+-------+
| 1 | jack | table1|
| 2 | ali | table2|
| 3 | peter| table3|
+----+------+-------+
注意:应该注意的是,在当前结构中(几个表)我的查询是这样的:
select id, name from table1
union all
select id, name from table2
union all
select id, name from table3
现在我想知道将这几个表转换为一个表并添加新列是否更好? (我认为新专栏有点过载,是真的吗?)
答案 0 :(得分:2)
这具有实际后果和哲学后果。从实际的角度来看,如果不了解更多关于如何使用数据的信息,就很难知道。这个数据的读写比率是多少?在一个查询中,选择两个或多个表中的数据的频率是多少?如果你必须做一个UNION来收集所有数据,那么它既慢又麻烦。
我更喜欢哲学方法,从主题开始。这里只有一种实体,或者是否有三种不同的权利都具有相同的属性?这几乎总是告诉我是否将它们放在同一张桌子上,并且在大多数情况下也会对实际问题给出正确答案。
我会说我会为额外属性的值寻找更好的名称。 “table1”,“table2”和“table3”对我来说似乎非常不透明。这个主题也应该提供一个线索。
修改强>
现在我得到了主题,我将支持单个表格。这是一种观点,而不是一种坚硬而快速的规则。所以它就像是。
+----+-----------+----------+--------------+
| id | word | language |translation |
+----+-----------+----------+--------------+
| 1 | butterfly | Spanish | mariposa |
| 2 | butterfly | French | papillon |
| 3 | butterfly | Italian | farfalla |
| 4 | chair | Spanish | silla |
+----+-----------+----------+--------------+
答案 1 :(得分:1)
如果您确定所有三个表都保留了公共属性,那么单个表的选项就可以了,如果这个表可能不会持久,那么就不要考虑它。
此thread可能对您有所帮助。