数据库设计:很多行与很多表?

时间:2011-07-28 12:57:14

标签: mysql sql database-design

我正在为一个系统做数据库设计工作,我需要将一些可变长度数组存储到mysql数据库中。

如果不是数千,则数组的长度(最多)为数百个。

将定期创建新数组,可能每天数十个。

  1. 我应该将这些数组存储到一个很快会变得巨大或
  2. 的表中
  3. 为每个数组创建一个新表,很快就会有一个或多个表?
  4. 别的什么? (就像数组值的格式化文本列一样)
  5. 澄清,1。大致意思

    CREATE TABLE array (id INT, valuetype VARCHAR(64), ...)
    CREATE TABLE arr_values (id INT, val DOUBLE, FK array_id)
    

    和2.

    CREATE TABLE array (id INT, valuetype VARCHAR(64),...)
    CREATE TABLE arr_values (id int, val DOUBLE, FK array_id) -- template table
    CREATE TABLE arr1_values LIKE arr_values ...
    

    arr_values将用作通过连接到完整数组来查询的数组。 关于为什么某些方法比其他方法更好的任何想法?

4 个答案:

答案 0 :(得分:26)

几张桌子中有很多行。为每个新结构/记录创建一个新表是绝对不正确的,也是使用关系数据库的最糟糕的方法。

事实上,几乎在您的代码动态创建表的任何时候,您都在做一些非常糟糕的事情。

答案 1 :(得分:7)

正如对这些问题的所有答案一样,它总是在某种程度上取决于您的最终结果需要是什么,但就个人而言,我总是倾向于使用单个表而不是动态创建的表 - 这使得查询更加简单。当你查看数据库模式时,它也会使它变得更简单(我认为) - 成千上万的表可能会在直接访问数据库时更容易找到所需的内容。

此外,如果您发现需要在某个位置使用另一个字段扩展“数组”,则意味着将有一个数据库表要更改,而不是很多。

答案 2 :(得分:1)

在我看来,每个数据数组都有不同的架构。您是否考虑过使用NoSQL数据库?在我看来,这将更容易合作。

如果你必须坚持使用MySQL,那么你肯定希望尽可能少的表。根据您提供的内容,您可以拥有一个包含三列的表格 -

array ;connects all the related records to the correct array
field ;the name of the field (array key)
value ;the actual value for that field

并且,如果您需要同一数组“type”的多个副本,请同时添加实例列。

答案 3 :(得分:0)

增加表的数量,直到模式规范化(很少或没有冗余/重复)。不要增加表之外的数量,并且要谨慎添加新的性能表(现代数据库,除少数例外,比你想象的要快),或处理边缘情况,例如每次发生一次的重复应用程序的生命周期,或<1%的行。

如果我们知道问题的范围 - 这些地址,客户,书籍还是什么,那么理解您的问题也会更容易?