MySql - 10个(非常)类似的表或1个表

时间:2017-07-18 13:28:20

标签: mysql database database-design

tl;博士在底部。

所以,我有一个大致有以下架构的应用程序:

`budget`hasMany =>
   `item1`
   `item2`
    ...
   `item10`

现在,这10个项目共享一组 23个字段,在所有10个项目中匹配。至少其他 20个字段在7个或更多项目中共享。 这就是这样,回顾它是愚蠢的,但目前它似乎是正确的。

所以,考虑到这一点,我想:为什么地狱不会使9个表消失,制作1个包含所有项目的所有字段的表,因为无论如何都要分享很多。

我会获得什么?很多代码都会消失。很多桌子都会消失。使用所有项目检索预算只需要使用单个表进行联接,而不是10个联接。

我怀疑这个新的会有大约80列。所有小列,主要存储整数,双精度或小变量。尽管如此,80列仍然让我感到震惊。另一个问题是,在将来,我不会拥有10个表,每个表有1kk记录,而是有一个10kk记录的大表。

所以,我的问题是:是否值得更改以删除一些冗余,减少代码量并提高检索和处理数据的能力?

tl; dr 我应该将10个表组合成1个表,考虑到10个表共享很多公共字段(但新表还有80个列),以减少表的数量,应用程序中的代码量以及检索数据的方式是什么?

2 个答案:

答案 0 :(得分:0)

据我所知,这可能不是很多,最好将数据库分成单个部分(就像现在一样)。调用它来规范化数据库(“https://en.wikipedia.org/wiki/Relational_database”)。

它限制了数据库可能发生的错误,并且通过更新等改变事物的风险更小,如果你想插入一个项而不是另一个项则更好(如果你只有1个表,则所有其他项都将为null)并且你总是必须返回并获取信息等,这将使插入语句更难)。

如果您一次总是插入所有20个项目并且总是根据所有项目进行查询(对单数项目没有高级计算)那么将所有内容放入一个表格中可能是合理的。但是如果你只想插入几个项目,然后你想进行更复杂的计算,我会建议你把它们分开并通过某种Customer_Id或w / e链接

答案 1 :(得分:0)

@yBrodsky,例如,您应该为家具创建一个表,用于存储家具名称,ID和描述。另一个表格将使用家具ID存储其属性。

家具表将有colums id,furniture_title,description。
和 其他表将有 id,furniture_id,attribute_key,attribute_value