代码之家  ›  专栏  ›  技术社区  ›  mspir

一个包含多个字段的mysql表还是多个(数百个)包含较少字段的表?

  •  2
  • mspir  · 技术社区  · 15 年前

    我正在为一个客户设计一个系统,在这个系统中,他可以为自己销售的各种产品创建数据表格。 他将使用的字段数不会超过600-700(最坏情况)。看起来他可能在400-500(最大值)之间。

    我有两种方法来创建数据库(使用元数据):

    a)为每个产品创建一个表,该表只包含该产品所需的字段,这将生成数百个表,但每个产品只包含必需的字段

    b)将一个表与所有可用的表单字段一起使用(当前300到最大700之间的任意范围),生成一个包含多个字段的表,其中每个产品条目仅使用大约10%(一个产品通常不应使用超过50-80个字段)

    哪种解决方案最好?请记住,表的维护(创建、更新和更改)将使用元数据完成,因此我不需要手动更改表。

    谢谢您!

    /****更新*****/

    只是一个更新,即使经过这么长时间(和分配额外的经验收集),我需要提到 normalizing 你的数据库是个糟糕的主意 . 更重要的是,一个没有规范化的数据库几乎总是(从我的经验来看总是)表明一个有缺陷的应用程序设计。

    4 回复  |  直到 10 年前
        1
  •  2
  •   Jeremy Smyth    15 年前

    你的关键决定因素是 normalization 是必需的。即使您只是使用应用程序添加数据,您仍然需要处理异常情况,例如,如果某人的电话号码更改,并且他们在应用程序的生命周期中插入多行,会发生什么情况?哪一行包含正确的电话号码?

    举个例子,你可能会发现 repeating groups 在您的数据中,就像一个人拥有多个电话号码一样;与其有三列名为“phone1”、“phone2”、“phone3”,不如将这些数据分解到自己的表中。

    在标准化过程中还有其他问题,例如传递的或非关键的依赖关系。这些概念将有希望引导您在没有 modification anomalies ,正如你所希望的那样!

        2
  •  4
  •   rytis    15 年前

    我要三张桌子:

    • 产品

      • 身份证件
      • 名称
      • 你还需要什么
    • 领域

      • 身份证件
      • 字段名
      • 你还需要什么
    • 产品领域

      • 身份证件
      • 产品标识
      • 菲尔德夫人
      • 字段值
        3
  •  1
  •   Adrian Schmidt    15 年前

    脉冲群解是一个很好的方法。

    您不想为每个产品解决方案使用一个表,因为在插入或删除产品时,不必更改数据库的结构。只应插入或删除一个或多个表的行,而不应插入或删除表本身。

        4
  •  1
  •   Dave Sherohman    15 年前

    虽然这可能是必要的,但对于像产品列表这样简单的东西,有这么多字段在我看来,你可能有一个有缺陷的设计。

    您需要分析潜在的表结构,以确保每个字段包含的信息不超过一条(例如,单个字段中的“2个锤子,500个钉子”不正确),并且每个信息不超过一个字段(例如,具有 phone1 , phone2 , phone3 字段不正确)。这两种情况中的任何一种都表明,您应该将该信息移到一个单独的相关表中,并使用一个外键将其连接回原始表。正如pulegium所证明的那样,这种技术可以快速地将数据分解为三个表,总共只有十几个字段。