我正在创建一个小型新闻网站,有人建议我看一下我做过的规范化,虽然我理解它但我不知道它是否与所有表格相关数据库。例如,我有这个"文章"表包括:
ID - 10001
Featured - 0 or 1
Category - Category Name
Title - Title For The Article
Article - This is the article.....
Photo Description - Photo to go with blog 10001
Photo Name - John Smith
Photo Link - www.johnsmith.com
Author - myname@gmail.com
Keywords - keyword, keyword, keyword, ...
Added - 2014-07-27 10:41
Views - 600
离开此表是否有任何问题或是否需要将其转换为第3范式?
编辑:
如果我有以下内容:
**Authors**
ID
email
name
avatar
bio
website_link
facebook_link
twitter_link
**Articles**
ID - 10001
Featured - 0 or 1
Title - Title For The Article
Article - This is the article.....
Photo - 10001.jpg
Photo Description - Acts as alt tag
Photo Name - Crediting photographer
Photo Link - Link to credited photographer
Author - Author ID
Added - 2014-07-27 10:41
Views - 600
**categories**
ID
category
**article_categories**
ID
article_id
category_id
我仍然觉得很难理解为什么有这么多桌子是如此之大的原因,尽管现在有很多需要加入的连接。为什么使用php更容易说
select * from articles where category == $category
或
select * from articles where featured == 0
或
select * from articles where author == $author_id
等等
答案 0 :(得分:4)
为新闻,类别,照片,作者和关键字制作单独的表格
新闻强>
ID - 10001
Featured - 0 or 1
category_id - //belongs to category table
Title - Title For The Article
Article - This is the article.....
Added - 2014-07-27 10:41
Views - 600
<强>类别强>
ID
name
照片强>
ID
Photo Description - Photo to go with blog 10001
Photo Name - John Smith
Photo Link - www.johnsmith.com
<强>作者强>
ID
Author - myname@gmail.com
<强>关键字强>
ID - 10001
Keywords - keyword
一条新闻可能有多张照片,所以制作一张桥牌表news_photos
<强> news_photos 强>
id
news_id
photo_id
类似地,一个新闻可能有多个作者,因此制作一个桥表news_authors
<强> news_authors 强>
id
news_id
author_id
另外一条新闻可能有多个关键词,所以制作一个桥牌表news_keywords
<强> news_keywords 强>
id
news_id
keyword_id
答案 1 :(得分:0)
我建议您至少将类别和关键字移到单独的表格中。
当您必须按关键字或类别搜索文章时,这将帮助您编写更有效的SQL查询。
另一方面,您需要编写更多代码来执行此操作,参考数据插入表单等,但它会更好,更清晰,绝对更好。
你应该:
创建Categories
表(Id, Description
)
创建Keywords
表(Article_Id, Keyword
)
用Articles.Category
替换Articles.Category_Id
字段,然后移除Articles.Keywords
字段。
答案 2 :(得分:0)
您复制了许多描述类别名称的字符串。更容易存储整数值,而不是每次都使用类别名称。
答案 3 :(得分:0)
您选择规范化的方式在很大程度上取决于您的业务案例,而不是为了它而正常化。这就是为什么你的设计方法至关重要,从ERD(自上而下方法)开始,这有助于我决定如何最好地规范化。