在多个表中拆分记录或使用单个表在单个表中存储多个记录的优点和缺点是什么

时间:2011-12-31 12:45:05

标签: mysql database database-design

我需要知道:

  1. 在多个表中拆分记录或使用单个表在单个表中存储多个记录有什么优缺点
  2. 哪种方法适用于大型数据库站点?
  3. MySql查询的执行速度是多少?
  4. 如何在数据库中提高查询性能?
  5. 什么是数据解析?我从某人那里听说它只是一种针对Apache-MySql服务器的黑客攻击。如果是这样,我怎样才能阻止它发生(黑客编写脚本并从服务器下载所有数据)

2 个答案:

答案 0 :(得分:2)

这篇文章只是我对此事的看法。我可能在某些或更多部分错了。

我会深入浅出我认为你正在寻找的东西;归一化和非规范化数据:

为什么要规范化:

  • 减少数据冗余(单个数据库中的多个数据副本,难以维护)
  • 更轻松的数据到架构映射可视化
  • 帮助处于面向对象编程的某个角度

为什么反规范化:

  • 提高查询效果
  • 当你有静态/持久数据时,为什么不呢?

如果您正准备设置数据库,请立即考虑数据的用途。并非所有数据都需要标准化或非规范化;你可以有一个混合动力车。同样,这是适用的。

数据的目的与获取数据的方式一样重要,至少在建模方面如此。如果您正在使用高度事务性的数据库但需要半小时(甚至更短的间隔)报告,您还必须考虑数据源冗余(这次我的意思是还要备份或复制数据库以保证数据安全) - 那么你将决定你的表是否需要混合,标准化或非规范化模型。例如,如果您的客户要求将数据发送给他们而不是作为报告而是作为结构化数据,您将能够处理他们对标准化数据的需求,但这可能不一定意味着您必须将其标准化--ETL可能会发挥作用,但这是在仔细审查和测试转换或查询速度之后。当您只是从CMS服务器加载数据时,只需要记录报告时,您可以对数据进行非规范化以实现可访问性。如果您决定在加载过程中聚合数据,那么查询静态数据的速度也将可见。还有一个问题是你是否正在处理缓慢变化的维度,你的数据结构受到“分组”需求的影响。

对不起,我可能已经絮絮叨叨了...... 我还想再次强调一下这篇文章是我认为的。我不会将这些内容呈现为纯粹的,不变的事实......这些只是碰巧是我能够学到的一些东西。许多人可能/将会不同意我在这里写的内容,但最终,我只是在决定如何建模数据时分享自己的经验。

答案 1 :(得分:0)

1

  1. 如果您谈论的记录属于同一类型(架构),那么通常它们存储在同一个表中,因为将它们分成不同的表会有很多复杂性,因为它们能够查询并决定将新记录放在何处。为了加速查询,将索引分配给在WHERE子句中查询的那些字段。您也可能希望花一些时间构建优化查询。
  2. 一种方法是通用的:您以这样的方式分解您的域:每个实体都有自己的表,并且每个关联都有一个表。
  3. 要衡量执行时间,您可以使用MySQL Query Analyzer 。我认为phpmyadmin有查询执行的测量值。
  4. 请参阅索引,查询优化。我认为InnoDB有点慢,但多年来都没有检查过。
  5. 你正在考虑html翻录 - 通常javascript用于在页面加载期间注入一些html。那就是你只提供页面的一部分,js完成剩下的工作。所以html解析器打破了。您也可以使用函数来阻止sql注入。