gpt4 book ai didi

php - 关系数据库组织

转载 作者:行者123 更新时间:2023-11-29 04:19:43 24 4
gpt4 key购买 nike

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

最佳答案

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

如果黑客可以进入您的数据库,那么无论他们可以访问哪些表,这都是一个问题。所以在安全方面,把精力放在第一时间防止注入(inject)和数据库攻击上。试图将您的数据分离到不同的表中以保护它免受黑客攻击,就像将您的黄金存储在十个不同的银行金库中以防止银行抢劫一样;这是security through obscurity它会在每一步都对你不利。

相反,在安全方面:

  • 如果您的服务器代码已经编写完毕,请对其进行安全审核。专家可以为您指出可能对不需要的数据库访问产生影响的代码片段,并告诉您确切原因。我想说您从审计中获得的学习经验甚至比他们提出的实际具体建议更有值(value)。
  • 谷歌 SQL injection并尽可能阅读有关该主题的所有内容。大多数数据库黑客攻击都是通过这种技术发生的,因此您必须熟悉它是什么、易受攻击的代码是什么样子以及如何编写,这一点至关重要防止它的代码。
  • 设置出色的冗余数据库备份系统。至少将 2 个独立的存储在 2 个不同的地方。如果黑客删除了您的一张 table ,那么这将带来很大的不便,而不是破坏业务。

在规范化数据结构方面:

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

关于php - 关系数据库组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com