2015-02-05 106 views
1

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

+2

你混淆了我能看到的两个主题。你不应该因为担心安全问题而在妥善的设计上妥协。这是两件完全分开的事情。在设计方面,一个体面的数据库引擎(如mySQL或SQL Server)可以在一个表中处理数百万行数百万行。您的硬件可能更受限制。 – JLo 2015-02-05 13:15:19

+1

如果你担心黑客会“丢桌子”,那么你需要定期备份......但是黑客们可能会丢掉很多桌子,就像他们可以丢下一张桌子一样 – 2015-02-05 13:17:34

+0

@JLo对不起,我应该改变标题吗? – Yuran 2015-02-05 13:17:58

回答

3

简答:是的。正如JLo在上面的评论中所说的那样,在设计数据库结构时,你不应该主要考虑安全问题。主要考虑数据存储的效率(即标准化)。

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

相反,在安全性方面:

  • 投资于你的服务器代码的安全审计,如果它已经写入。专家可以为您指出一些代码,这些代码可能会影响不必要的数据库访问并准确告诉您为什么。我想说,你从审计中获得的学习经验比他们提出的实际具体建议更有价值。
  • Google SQL injection并阅读所有可能的话题。这种技术是大多数数据库黑客攻击的发生方式,至关重要的是,您非常熟悉它是什么,易受攻击的代码是什么样的,以及如何编写防止它的代码。
  • 设置优秀的冗余数据库备份系统。至少2个独立的存储在2个不同的地方。如果黑客丢掉你的桌子,那么它将成为一个主要的不便,而不是业务中断者。

在规范化的数据strucutre方面:在同一个地方

  • 商店相同形状的数据。所以只要所有的页面都可以用表格中的相同列来描述/定义,那么绝对将它们存储在同一个表格中。
  • 了解Mysql性能和索引。一个索引很差/结构不良的数据库可能会在低流量下停下来,在最大的表中不到100万行;索引良好的行可以在行数为的数十亿行下行得通。随着流量增加,这个问题会变得更大,因此希望您的预算可以相应增长,并让您得到专家的帮助。性能问题可能会突然后退,所以在他们崩溃之前值得大家学习。
  • 不要太担心行数。这里主要关注的是性能;往上看。关系数据库是为处理大表而建立的;这是他们的主要用例。使用基本的索引技术(例如,在每个外键列和任何其他通常查询的列上添加索引(但主键列已经编入索引以便不需要)),您应该可以将其设置为高达1M- 10M行没有主要性能问题。
  • 找到一种方法来根据实际数据对查询进行基准测试。一些性能优化很明显,但俗话说得好,premature optimization is the root of all evil。例如,在编写查询时,请进行一些基准测试,以了解是否更少查询(更长/更多JOIN)或更多查询(更小更快)是否具有更高性能。作为一个非常普遍的规则,更少的查询会更好,但是在很多情况下,您的应用程序会不同意;-)因此您需要基础架构来自行测试。添加索引时同样的事情;基准测试可以让您对数据库的索引效果有一个良好的直觉,并且这种直觉是非常有价值的东西。
+2

如果可以的话,我会加倍努力。对于刚开始学习设计关系数据库的人来说,这是一个很好的技巧。 – JLo 2015-02-05 16:14:33

+1

谢谢JLo!根据我的经验,建立熟悉Mysql的最佳方式是拥有像SequelPro这样的GUI,以便您可以玩查询,自己添加索引等等。似乎现在很多项目(特别是在Rails世界中)只能通过控制台,迁移脚本等间接访问数据库;与数据库之间的这种距离确实让我们难以理解发生了什么。 – 2015-02-05 17:26:50

+0

@TopherHunt非常感谢您的帮助,这非常有帮助,我一定会用GUI搜索数据库管理工具(适用于Linux),以了解我是否可以更多地关注设计并拥有更多的“直接联系”与数据库,以便我可以提高我的技能。再一次,谢谢。 – Yuran 2015-02-05 18:09:27

2

因为这个网站可能会有数百或数千页的时间,它是安全,干净,并确定在一张桌子上有这么多页面?

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

知道有一天有人可以进入该网站并删除 表,我会将所有帖子都删除。

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