关系数据库组织

时间:2015-02-05 13:13:09

标签: php mysql sql phpmyadmin

我正在为一个网站创建一个CMS,其中包含新闻和新闻页面的不同主题。所以我为每个主题(体育,文学等)创建了一个表,只是为了拥有一个更清洁,更好的数据库组织(我想)。但是我最近了解了关系数据库,并发现用较少的表(只有2个表主题和内容)可以实现相同的任务,因此代码更少(很棒)。但我担心的是,由于这个网站可能有时间有数百甚至数千页,是否安全,干净,并且可以在一张桌子中放置这么多页面?知道有一天有人可以入侵该网站并删除该表,我会松开所有帖子。那么有没有更清洁,更安全的方法来完成这项任务,但仍然使用关系数据库的概念?

2 个答案:

答案 0 :(得分:3)

简短回答:是的。正如JLo在上面的评论中所说,在设计数据库结构时,你不应该主要考虑安全性;主要考虑数据存储的效率(即规范化)。

如果黑客可以进入您的数据库,无论他们可以访问哪些表,这都是一个问题。因此,在安全性方面,首先要集中精力防止注入和数据库攻击。尝试将您的数据分成不同的表以保护其免受黑客攻击,就像将您的黄金存放在十个不同的银行金库中,以防止银行抢劫;它是security through obscurity,它在每一步都会对你不利。

相反,在安全性方面:

  • 如果已经编写了服务器代码,请投资安全审核。专家可以为您指出可能对不需要的数据库访问产生影响的代码,并告诉您具体原因。我说从审计中获得的学习经验比他们提出的实际具体建议更有价值。
  • Google SQL injection并阅读有关该主题的所有内容。此技术是大多数数据库黑客的发生方式,而且您的重要性至关重要不仅仅是熟悉它是什么,什么是易受攻击的代码,以及如何编写可以防止它的代码。
  • 设置优秀的冗余数据库备份系统。至少2个独立的存储在2个不同的地方。如果一个黑客DROP你的一个表,那将成为一个主要的不便,而不是一个业务破坏者。

就标准化数据结构而言:

  • 将相同形状的数据存储在同一位置。因此,只要可以根据表中的相同列描述/定义所有页面,就绝对将它们存储在同一个表中。 / LI>
  • 了解Mysql性能和索引。索引不佳/结构不良的数据库可能会在流量较低的情况下停止运行,并且在最大表中的行数不足一百万行;索引良好的人可以使用数十亿的行表现良好。随着您的流量增加,此问题会变得更大,因此希望您的预算会相应增长并让您获得专家​​帮助。性能问题可能会突然发生,所以在它们崩溃之前,值得大家了解它们。
  • 不要过多担心行数。这里主要关注的是性能;往上看。建立关系数据库来处理大表;这是他们的主要用例。使用基本的索引技术(例如,在每个外键列和任何其他通常要查询的列上添加索引(但主键列已经编入索引,因此他们不需要),你应该能够使其达到1M-10M行而不会出现重大性能问题。
  • 找到一种方法来根据实际数据对您的查询进行基准测试。一些性能优化很明显,但正如俗话所说,premature optimization is the root of all evil。例如,在编写查询时,请进行一些基准测试,以了解更少的查询(更长/更多JOIN)或更多查询(更小更快)的性能是否更高。作为一个非常一般的规则,更少的查询更好,但在许多情况下,您的应用程序将不同意;-)所以有适当的基础设施来自己测试它。添加索引时也一样;基准测试可以让您对索引对数据库的影响有一个良好的直觉,而直觉也是非常有价值的。

答案 1 :(得分:2)

  

由于这个网站可能会有数百甚至数千页,是否安全,干净,并且可以在一个表中拥有这么多页面?

只要您的索引正确,您就可以在数据库中存储数百万个页面。

  

知道有一天有人可以入侵网站并将其删除   表,我会松开所有帖子。

使用一个或几千个表在这里没有区别,如果您可以删除一个表,则可以将它们全部删除。