两个具有相同列的表或一个具有附加列的表?

Tes*_*sla 7 mysql database database-design

假设我有两个表(苹果和橘子)具有相同的列和只是一个不同的表名称.是否有任何优点/缺点将其转换为一个表(简称其称为Fruit),并附加一个列'type',然后存储Apple或Orange的值?

编辑澄清:

CREATE TABLE apples(id int,weight int,variety varchar(255))

CREATE TABLE oranges(id int,weight int,variety varchar(255))

要么

CREATE TABLE fruit(id int,weight int,varchar(255),type ENUM('apple','orange'))

Bra*_*vic 5

取决于约束:

  • 你有外键或检查apples不上不存在oranges(或相反)?
  • 您是否需要在两个表中保持密钥唯一(因此没有apple与某些密钥相同的ID orange)?

如果这两个问题的答案是:"是""否",则保持表格分开(因此约束可以特定于表格1).

如果答案是:"no""yes",则将它们合并在一起(这样你就可以创建一个跨越两者的键).

如果答案是:"是""是",请考虑模拟继承2:

在此输入图像描述


1 查找数据是看起来类似的表的典型示例,但必须保持独立,以便FK可以保持独立.

2具体来说,这是表示继承的"所有类在单独的表中"策略(也就是类别,子类,子类型,泛化层次等).您可能需要查看此帖子以获取更多信息.