【问题标题】:Expert opinion needed on Database design数据库设计需要专家意见
【发布时间】:2011-11-10 03:28:44
【问题描述】:

我非常感谢专家就网站数据库架构提供的建议。

我有一个分类列表网站的数据库设计,目前在 MyISAM 引擎中完成,因此没有关系、键等。

请查看当前设计的 ER 模型:

我需要知道我是否在 DB 设计的正确轨道上...(电子邮件和密码字段在用户和广告表中都是多余的,因为第一个计划不是要求用户注册,但该计划是最近发生了变化。所以,请忽略这一点,因为我将从 Ads 表中删除这些字段)

预计该网站在发布后的几个月内每天至少有 100,000 次页面浏览量。

请就您对此设计的看法以及可以做得更好的地方提出建议。

还请就用于此类站点的最佳 Db 引擎提供建议(InnoDb 或任何其他...)。

请就该数据库的最佳存储引擎提出建议,牢记性能、负载、Db 完整性(如果需要,因为它目前是在 MyISAM 引擎上设计的,因此没有 Db 完整性)以及其他需要考虑的因素这样的网站。

我知道特定的数据库问题/问题只有在实际发生时才能处理,但至少我想朝着正确的方向开始。

提前感谢您的帮助。

【问题讨论】:

  • ipn和payment有什么区别?
  • 引起我注意的第一件事:在那个 ER 模型中没有 FK 关系
  • 您可能需要考虑标准化,如果您还没有这样做的话。以用户为例,我想知道您是否真的希望多个用户共享相同的电子邮件、密码等,或者用户是否可以同时确认和忘记确认他们的注册。像这样的冗余可能会导致不一致或需要复杂的完整性检查......
  • @Andrew Cooke - 只需考虑 ipn
  • @a_horse_with_no_name - 是的,没有 FK 关系,因为它使用 MyISAM 存储引擎

标签: mysql performance database-design storage-engines


【解决方案1】:
  1. 你为什么要使用 MyISAM?据我所知,您不是在谈论高性能网站,为什么要使用它???使用 InnoDB。

  2. 数据完整性不是一种选择,因此如果您不是专家,您可能不会考虑在您的应用程序中实现逻辑,因此您应该真正考虑使用 FK。

  3. 仅查看您的 ER 模型(它甚至不是 ERM,因为您没有定义任何关系,因此没有 R,它更像是一个 EM)我们不能说那么多。我们需要一个故事,而这个故事似乎很大。

  4. 每天点击 100k 次是微不足道的,在这种情况下会产生误导。每秒的最高预期速率是多少?这个水平必须能维持多久?

  5. 此模型也缺少数据类型。即使是最小的分析,这些也不是可选的。

  6. 这样的事情通常需要几天的时间来讨论和分析,我觉得这里有点过分了,特别是考虑到信息稀缺。

【讨论】:

  • 谢谢马吕斯。我不太确定数据完整性是否在应用程序逻辑中实现,因为我没有查看所有代码。无论我看到什么似乎都没有暗示这样的事情。如果我现在将外键添加到数据库中,我分解代码的可能性有多大?我想在代码中不会有任何实例在不检查其有效性/完整性的情况下操纵某些数据,但是如果有任何这样的实例并且我添加了外键会发生什么......如果它真的存在,我该如何管理这种情况发生?
  • 至于 EM,我只是在 MYISAm(因此没有 FK 等)数据库上使用了一个免费的基本建模工具。
  • 如果您将 FK 添加到表中并且应用程序未正确编程,您可能确实会遇到问题。例如,您在将创建图片的广告插入ads 之前插入adpics。如果没有错误,则会在adpics 中插入无效条目(无效,因为被推荐的广告不存在)。我的建议是进行更改、测试和解决您遇到的任何问题。这些问题并不新鲜,您只是在 FK 的帮助下发现它们,而不是让您的数据损坏(条目引用其他不存在的条目)。
【解决方案2】:

一目了然。 . .

我们在您的图表中看不到主键、唯一约束或类似内容。他们的缺席令人不安。

几乎每个表都有一个 id 号。其中有几个只是称为“id”,而其他有一个更具描述性的名称。 更具描述性是这两个想法中更好的。

没有其他唯一约束的表中的 id 号通常是错误的。 (通常,但并非总是如此。)例如,表“cats”可能需要对“catname”的唯一约束。否则,id 号将只标识一行,而不是一只猫。 (这意味着您可以有两行或多行具有相同的“猫名”。)

表格 adxfields 和 subcatxfields 看起来像是等待机会的灾难。表 'subcatxfields' 看起来像是某种 EAV 反模式。在您走这条路之前,请仔细查看Bill Karwin's slideshow on database anti-patterns。 (EAV 从幻灯片 16 开始。)

Subcat 定价可能应该移到单独的表格中。

有一个international standard for country codes。你最好使用标准的国家代码而不是你自己的身份证号码。使用人类可读的代码意味着您通常可以消除连接。 (通常,但并非总是如此。)

“城市”表没有足够的列来标识城市。 (美国有很多城市叫“华盛顿”。)

时间够了。 . .

【讨论】:

  • 谢谢猫叫。使用键的意图,约束是存在的,即使它没有出现在实体模型中,因为它是一个 MYISAM 引擎......您对 adxfields 子字段有哪些改进建议?
猜你喜欢
  • 2011-05-20
  • 2010-10-30
  • 2019-10-27
  • 2010-10-30
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多