如何避免MySQL中的表重复

时间:2016-07-29 14:22:54

标签: mysql database

我对MySQL知之甚少,而且我遇到以下情况:

  • 艺术家表,带有ID和字符串
  • Level 表,带有id和字符串
  • Style 表,带有id和字符串

然后,我有3张完全相同的表:

  • 填充表,包含一些自定义字段+引用上面的3个表格
  • Beat 表,包含一些自定义字段+引用上面的3个表格
  • Sheet 表,包含一些自定义字段+引用上面的3个表

这3张最后一张表之间的唯一区别是,他们不会在前端部分采用相同的方法(每种类型一个类别)。

因此,我想知道是否有更好的解决方案,在MySQL中只有3个完全相同的表。我想过做一个带有3个布尔列的" pivot" 表(is_beat,is_fill和is_sheet是互斥的),但我不知道它是不是正确的方法。

2 个答案:

答案 0 :(得分:1)

您可以将FillBeatSheet表合并到一个表中,方法是将相同的原始列与 new 列放在一起描述它是什么类型的。您可以调用列type

CREATE TABLE categories (
    artist_id int,
    level_id int,
    style_id int,
    custom_1 varchar,
    custom_2 varchar,
    ...
    type varchar,    -- can be 'Fill', 'Beat', or 'Sheet'

    FOREIGN KEY (artist_id) REFERENCES Artist (id),
    FOREIGN KEY (level_id)  REFERENCES Level (id),
    FOREIGN KEY (style_id)  REFERENCES Style (id)
)

答案 1 :(得分:0)

您可以创建一个按字符串定义“类别”的表,并将该表中每行的uid / guid与保存Fill / Beat / Sheet行的单个表中的列相关联。您可以将其称为“类型”,然后保存与类别表相关的guid / uid。这也允许无限制的“类别”类型。