【问题标题】:DB Design Help: Articles & Comments WebsiteDB 设计帮助:文章和评论网站
【发布时间】:2011-05-11 02:22:42
【问题描述】:

我正在开发一个包含文章和 cmets 的基本博客风格网站。我知道已经存在类似的软件(drupal、joomla),但在这种情况下我更喜欢自己动手,此外,这也是我学习的方式。 :-)

以下是基本的表格详细信息:

表名:用户
用途:有关有权访问系统的人员的信息。
列名
身份证
名称
哈希密码
电子邮件
网站
上次登录日期
上次登录IP
权限

表名:文章
用途:用户表中人们发表的文章。
列名
身份证
标题
users_id
日期
内容

表名:cmets
用途:对公众和用户发表的文章的评论。
列名
身份证
文章ID
cmets_authors_id
日期
评论

表名:cmets_authors
用途:有关对文章发表评论的人的信息。
列名
身份证
名称
电子邮件
网站

工作流程
1.) 用户表中的用户发布了一篇文章。
2.) 文章被写入文章表。
3.) John Doe,不是用户,对这篇文章发表评论。
4.) John 的个人信息被写入 cmets_authors。
5.) John 的评论被写入 cmets 表。

到目前为止听起来不错。现在考虑一下……

1.) 来自 users 表的用户对一篇文章进行 cmet。
2.) 用户的个人信息被写入 cmets_authors。
3.) 用户的评论写入 cmets 表。

问题
现在我们有关于用户的重复信息。 :-(
用户名、电子邮件地址和网站 url 存储在 users 表 cmets_authors 表中。

这是一个不正确的设计吗?有没有正确的方法呢?
只有少数用户的系统,也许不用担心。
一个拥有数百个用户的系统,嗯,这是很多重复数据。

非常感谢您的帮助。谢谢!

【问题讨论】:

    标签: database-design


    【解决方案1】:

    人们在重复数据上竖起大拇指...这可能是..可能是个问题。如果您正在构建订单输入系统、会计、交易、系统……这很重要。

    这是用于博客评论...可能发生的最糟糕的情况是什么?

    在最坏的情况下,您只有两份海报,而且只有两份海报……每个只有 cmets 的笨蛋都只有一次。因此,如果您有 1000 张海报,那么您将有 1000 行额外的大约 100 字节的行……哇,您正在占用一整兆字节的数据库空间。

    我是否推荐此数据模型作为仿真模式,不。我会设计很多不同的。但是我为非常大规模的企业应用程序设计,这些设计不一定是最容易编程的东西。他们只是表现出色。但在你的情况下,开始编码,不要为那一点冗余而烦恼。

    【讨论】:

      【解决方案2】:

      对于每条新评论,您都可以创建一个具有公共权限且没有密码的新“用户”。使电子邮件地址成为唯一的用户名,您将不会有重复的数据。在 cmets 上,您可以改为使用 cmets_authors_id user_id。

      【讨论】:

        【解决方案3】:

        也许我不是很了解您的设计,但是删除comments_authors 表并使用用户表中的permissions 字段来判断是否允许用户发布文章或只需添加 cmets。

        【讨论】:

        • 这是一个规模问题。如果你有十几位作者和数百万评论者,这种偏差可能是致命的。
        【解决方案4】:

        感谢您的反馈和不同的观点。我仍在争论采用哪种方法,所以我列出了每种方法的一些优点和缺点。有人说服我! :-)

        用户和评论者都在用户表中
        - 临:少一张表(cmets_authors 表已删除)
        - 缺点:hashed_pa​​ssword、last_login_date 和权限列不适用于评论者
        - 缺点:随着表的增长,当用户想要登录时,查询时间会增加

        使用 cmets_authors 表的当前设计
        - Pro:任何表中都没有未使用的列
        - 专业版:用户想要登录时的查询时间更快
        - 缺点:cmets_authors 表中的用户数据重复(用户表中的 # 个用户 = cmets_authors 表中的 # 个附加行)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-18
          • 2019-04-25
          • 1970-01-01
          • 1970-01-01
          • 2011-09-24
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          相关资源
          最近更新 更多