【问题标题】:do I need multiple tables or single?我需要多张桌子还是一张?
【发布时间】:2010-12-20 23:46:16
【问题描述】:

我正在开发一个工具,它可能需要填写超过一百万个数据。

目前我已经设计了 36 列的单表。我的问题是我需要将这些分成多个表还是单个??

单身有什么好处和坏处

如果是多个,那么优点和缺点是什么

以及用于提高速度的引擎是什么...

我担心的是一个大型数据库,每天至少有 50000 个查询..

有什么帮助吗??

【问题讨论】:

    标签: database database-design mysql mysql-management


    【解决方案1】:

    是的,您应该规范化您的数据库。一般的经验法则是,如果不是外键的列包含重复值,则应该对表进行规范化。

    规范化涉及将您的数据库拆分为表,并有助于:

    1. 避免修饰异常。
    2. 尽量减少数据结构更改的影响。
    3. 使数据模型提供更多信息。

    Wikipedia 上有大量关于规范化的信息。

    如果您有大量数据并且没有进行规范化,您最终将需要重新设计您的数据库,而这在事后很难做到,因为这不仅涉及更改任何访问数据库的代码,还将所有现有数据迁移到新设计中。

    在某些情况下,出于性能原因避免标准化可能会更好,但在做出此决定之前,您应该对标准化有充分的了解。

    【讨论】:

    • +1 为简洁起见。如果可以的话,我会再给你一个+1。 :)
    • 并非总是如此。有时有一个非常好的非规范化案例。也就是说,如果你问的是瘦问题:你应该规范化你的数据库。
    • @Stefan:一般来说,你应该先完全规范化,然后才根据性能需要去规范化。
    【解决方案2】:

    首先要问自己,你是在重复字段还是字段的属性。您的一张表是否包含应该分开的关系或属性。遵循第三范式...我们需要更多信息来提供帮助,但一般来说,一张有 36 列的表格闻起来像个屁。

    【讨论】:

      【解决方案3】:

      如果您想存储一百万行相同类型的行,那就去吧。任何体面的数据库都可以处理更大的表。

      设计您的数据库以最适合数据(从您的应用程序中可以看出),启动它,然后再进行优化。您可能会发现性能不是问题。

      【讨论】:

        【解决方案4】:

        您应该根据要存储的数据对数据库进行建模。这称为“规范化”:本质上,每条信息只应存储一次,否则表格单元格应指向包含该值的另一​​行或表格。例如,如果您有一个包含电话号码的表格,并且一列包含区号,那么您可能会在同一列中拥有多个具有相同值的电话号码。一旦发生这种情况,您应该为区号设置一个新表,并通过引用存储所需区号的行的主键来链接到其条目。

        所以不是

        id | area code | number 
        ---+-----------+---------
        1  | 510       | 555-1234
        2  | 510       | 555-1235
        3  | 215       | 555-1236
        4  | 215       | 555-1237
        

        你会的

        id | area code    id | number   | area code
        ---+----------    ---+----------+-----------
        1  | 510          1  | 555-1234 | 1
        2  | 215          2  | 555-1235 | 1
                          3  | 555-1236 | 2
                          4  | 555-1237 | 2
        

        如果以这种方式组织数据,尤其是在处理字符串值或二进制数据时,相同值的出现次数越多,就越有可能节省内存并获得更快的性能。此外,如果区号发生变化,您只需更新单个单元格,而不必对整个表格执行更新操作。

        试试这个tutorial

        【讨论】:

          【解决方案5】:

          相关性并不意味着因果关系。

          仅仅因为大量的列通常表明糟糕的设计,并不意味着大量的列糟糕的设计。

          如果您有一个规范化模型,您可以存储一个表所需的任意数量的列。

          【讨论】:

            【解决方案6】:

            视情况而定!

            那一张表是否包含一个“实体”?即所有 36 列属性是单一的东西,还是有几个“东西”混合在一起?

            如果混合,那么你应该规范化(分离成不同的实体,它们之间有关系)。你应该至少瞄准Third Normal Form (3NF)。

            最佳做法是尽可能地标准化;如果您稍后发现性能问题,则尽可能少地进行非规范化。

            【讨论】:

            • 是的,所有 36 列都与一个域相关。但所有 36 条信息都不同。
            • 接下来会解释...my 是一个网络信息工具,可为您提供有关该网站的各种信息。因此,当有人键入 google.com 时,它会提供有关 google 的所有信息。所以我的意思是所有 36 列都包含有关 google.com 的各种信息。但这是关于我正在谈论的一排。如果有人会搜索 facebook.com,那么另一行包含 facebook.com 信息 + 所有 36 个列
            猜你喜欢
            • 1970-01-01
            • 2018-04-09
            • 2012-05-23
            • 1970-01-01
            • 2017-02-07
            • 2011-11-17
            • 1970-01-01
            • 1970-01-01
            • 2020-03-25
            相关资源
            最近更新 更多