我正在开发一个基本的博客风格的网站,上面有文章和评论。我知道类似的软件已经存在(drupal,joomla),但我喜欢在这种情况下自己动手,而且,这是我学习的方式。 : - )
以下是基本表格详细信息:
表名:用户
目的:有权访问系统的人员的信息
列名:
ID
命名
hashed_password
电子邮件
网站
last_login_date
last_login_ip
权限
表名:文章
目的:用户在用户表中发布的文章
列名:
ID
标题
users_id
日期
内容
表名:评论
目的:对公众和用户发布的文章的评论
列名:
ID
articles_id
comments_authors_id
日期
评论
表名:comments_authors
目的:有关评论文章的人的信息
列名:
ID
命名
电子邮件
网站
工作流程:
1.)用户从用户表中发布文章
2.)文章写在文章表中
3.)John Doe,不是用户,对文章发表评论
4.)约翰的个人信息写在comments_authors上
5.)John的评论写在评论表中。
到目前为止听起来不错。现在考虑一下......
1。)用户表中的用户对文章发表评论
2.)用户的个人信息将写入comments_authors
3.)用户的评论被写入评论表。
问题:
现在我们有关于用户的重复信息。 :-(
用户的姓名,电子邮件地址和网站网址存储在users表和的comments_authors表中。
这是不正确的设计吗?是否有正确的方法呢?
只有少数用户的系统,可能不用担心
一个拥有数百个用户的系统,这是很多重复的数据。
我非常感谢你的帮助。谢谢!
答案 0 :(得分:1)
人们竖起重复的数据......它可能是......可能是个问题。如果您正在建立订单输入系统,会计,交易,系统......这是一个大问题。
这是博客评论......可能发生的最坏情况是什么?
在最糟糕的情况下,你有两份副本,只有两份海报...每一个只有一次评论的人。因此,如果您有1000张海报,那么您将有1000行额外的大约100字节的行......哇,你正在咀嚼整个数据库空间的MEGAbyte。我是否推荐将此数据模型作为模拟模式,不是。我的设计方式有很多不同。但我为非常大规模的企业应用程序设计,这些设计不一定是最容易编程的东西。他们只是表现出色。但在你的情况下,开始编码并不会出现那么少的冗余。
答案 1 :(得分:0)
对于每个新评论,您都可以创建一个具有公共权限但没有密码的新“用户”。使电子邮件地址成为唯一的用户名,您将不会有重复的数据。在评论中,您可以改为使用comments_authors_id user_id。
答案 2 :(得分:0)
也许我不能很好地理解你的设计,但删除comments_authors
表并使用users表中的permissions
字段判断用户是否被允许不是更好发表文章或只是添加评论。
答案 3 :(得分:0)
我很欣赏反馈和不同的观点。我还在争论采取哪种方法,所以我列出了每种方法的一些专业和概念。有人说服我! : - )
用户表中的用户和评论者
- 专业:少一个表(comments_authors表删除)
- Con:hashed_password,last_login_date和权限列不适用于评论者
- Con:随着表的增长,当用户想要登录时,查询时间会增加
使用comments_authors表的当前设计
- Pro:任何表中没有未使用的列
- Pro:用户想要登录时的查询时间更快
- Con:comments_authors表中的重复用户数据(users表中的#个用户数= comments_authors表中的#个附加行)