2010-11-16 59 views
1

我正在基于博客风格的网站上发表文章和评论。我知道类似的软件已经存在(drupal,joomla),但我更喜欢在这种情况下推出自己的产品,此外,这也是我学习的方式。 :-)数据库设计帮助:文章和意见网站

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

表名:用户
目的:关于人能够访问系统的信息。
列名
ID

hashed_pa​​ssword
电子邮件
网站
last_login_date
last_login_ip
权限

表名:文章
目的:用户在用户表中发布的文章。
列名
ID
标题
users_id
日期
内容

表名:评论
目的:对公众发表的一篇文章评论和用户。
列名
ID
articles_id
comments_authors_id
日期
评论

表名:comments_authors
目的:信息关于谁上的评论文章的人。
列名
ID

电子邮件
网站

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

目前听起来不错。现在考虑这个......

1.)用户从用户表中评论文章。
2.)用户的个人信息被写入comments_authors。
3.)用户的评论被写入评论表。

的问题
现在我们对用户的重复信息。 :-(
用户的姓名,电子邮件地址和网站的网址都存储在用户表的comments_authors表。

这是这样一个不正确的设计呢?有没有一种正确的方法呢?
一系统只有少数的用户,也许不是担心。
与数百名用户的系统,那么,这是一个很大的重复数据。

我真的很感谢您的帮助,谢谢!

回答

0

对于每一条新评论,您都可以创建一个拥有公共权限且无密码的新用户。使电子邮件地址成为唯一的用户名,并且不会有重复的数据。在评论中,您可以改为制作comments_authors_id user_id。

0

也许我不是很了解您的设计,但是移除comments_authors表并在您的用户表中使用permissions字段来判断是允许用户发布文章还是仅添加评论。

+0

这是一个规模问题。如果你有十几位作者和数百万评论者,那么这种倾向可能是致命的。 – 2010-11-16 22:28:33

1

人们竖琴重复的数据...它可以是..可以是一个问题。如果你正在建立订单录入系统,会计,交易,系统......这是一件大事。

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

最糟糕的情况是,你有两份副本,只有两份海报......每个只有评论的schmuck只有一次。所以如果你有1000张海报,你会有1000行额外的100行左右的字节...哇,你正在咀嚼整个MEGA字节的数据库空间。

我是不是推荐这个datamodel作为模拟模式,没有。我的设计有很大的不同。但是我为大规模企业应用程序设计,这些设计不一定是最容易编程的东西。他们表现很好。但在你的情况下,开始编码,不要为这个小小的冗余而烦恼。

0

我很欣赏反馈和不同的观点。我仍在辩论采取哪种方法,因此我列出了每种方法的一些专业和专业。有人说服我!:-)

用户和评论者都在用户表
- 临:少了一个表(comments_authors表中删除)
- 精读:hashed_pa​​ssword,last_login_date和权限列不适用评议
- 缺点:作为表的增长,查询时间增加,当用户要登录

目前的设计使用comments_authors表
- 临:任何表中的未使用的列
- 临:当用户要登录
更快的查询时间 - 缺点:(在comments_authors表用户表#用户=#附加行)复制在comments_authors表用户数据