几个分离的表与一个带有附加列的集成表?

时间:2015-11-21 11:26:29

标签: mysql database-design data-structures

我有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

现在我想知道将这几个表转换为一个表并添加新列是否更好? (我认为新专栏有点过载,是真的吗?)

2 个答案:

答案 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可能对您有所帮助。