我需要多个表还是单个?

时间:2010-12-20 23:46:16

标签: database database-design mysql mysql-management

我开发的工具可能有超过一百万的数据需要填写。

目前我设计了36个coloumns的单人桌。我的问题是我需要将它们分成多个表还是单个?

如果单身有什么优缺点

如果多,那么优势和劣势是什么

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

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

任何帮助??

6 个答案:

答案 0 :(得分:4)

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

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

  1. 避免修改anomolies。
  2. 尽量减少更改对数据结构的影响。
  3. 使数据模型更具信息性。
  4. 有关Wikipedia的规范化的大量信息。

    如果您有大量数据并且没有正常化,那么您最终将需要重新设计数据库,这非常难以追溯,因为它不仅会涉及更改任何数据。访问数据库的代码,但也将所有现有数据迁移到新设计。

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

答案 1 :(得分:1)

首先要问自己,你是在重复田地的领域或属性。您的一个表是否包含应该分开的关系或属性。遵循第三范式...我们需要更多信息来帮助,但一般来说,一个有三十六列的表就像一个数据库屁一样。

答案 2 :(得分:0)

取决于!

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

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

最佳做法是尽可能正常化;如果你以后发现了性能问题,那么就尽可能少地进行反规范化。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

所以而不是

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 :(得分:0)

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

仅仅因为列的通常表示设计不好,并不意味着 是糟糕的设计。

如果您有一个标准化模型,则可以存储任何数量的列,只需要一个表。