我开发的工具可能有超过一百万的数据需要填写。
目前我设计了36个coloumns的单人桌。我的问题是我需要将它们分成多个表还是单个?
如果单身有什么优缺点
如果多,那么优势和劣势是什么
以及用于速度的引擎是什么......
我担心的是一个大型数据库,每天至少会有50000个查询..
任何帮助??
答案 0 :(得分: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)
相关并不意味着因果关系。
仅仅因为列的通常表示设计不好,并不意味着的
如果您有一个标准化模型,则可以存储任何数量的列,只需要一个表。