【问题标题】:Several separated tables vs one integrated table with an additional column?几个单独的表与一个带有附加列的集成表?
【发布时间】:2016-02-23 21:21:19
【问题描述】:

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

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

【问题讨论】:

  • 如果不知道这些值代表什么、一行代表什么以及它们在现实世界中如何相互关联,就无法分辨。实际数据是多少?
  • @DavidAldridge 实际数据是几个字典表。 Table1:“中文单词”,Table2:“法语单词”等等......!在那里,所有表格都有一个包含英文单词的公共列。我的意思是所有表都是English to FrenchEnglish to Chinese
  • 单个表应该是正确的方法,然后另一列是语言的关键。

标签: mysql database-design data-structures


【解决方案1】:

这具有实际后果和哲学后果。从实际的角度来看,如果不了解更多关于如何使用数据的信息,就很难知道。该数据的读写比是多少?在单个查询中多久选择一次来自两个或多个表的数据?如果你必须做一个 UNION 来收集所有数据,它既慢又麻烦。

我更喜欢哲学方法,从主题开始。这里只有一种实体,还是三种不同的实体都碰巧具有相同的属性?这几乎总是告诉我是否将它们放在同一张桌子上,并且在大多数情况下也对实际问题给出了正确的答案。

我会说我会为额外属性的值寻找更好的名称。 “table1”、“table2”和“table3”对我来说似乎非常不透明。主题也应该在这里提供线索。

编辑:

既然我得到了主题,我将赞成使用单个表格。这是一种意见,而不是硬性规定。所以它会是这样的。

+----+-----------+----------+--------------+
| id | word      | language |translation   |
+----+-----------+----------+--------------+
| 1  | butterfly | Spanish  | mariposa     |
| 2  | butterfly | French   | papillon     |
| 3  | butterfly | Italian  | farfalla     |
| 4  | chair     | Spanish  | silla        |
+----+-----------+----------+--------------+

【讨论】:

  • 好的,现在我明白了。如果您将这些表称为“French”、“Spanish”、“German”而不是 Table1、Table2、Table3,我会更快看到它。
【解决方案2】:

如果您确定所有三个表都将保持具有共同属性,那么单个表的选项很好,如果可能不会持续,那么不要考虑它。

这个thread 可以帮助你更多。

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多