表格中的标准化/第三范式?

时间:2014-07-29 10:09:36

标签: mysql normalization database-normalization

我正在创建一个小型新闻网站,有人建议我看一下我做过的规范化,虽然我理解它但我不知道它是否与所有表格相关数据库。例如,我有这个"文章"表包括:

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等等

4 个答案:

答案 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(自上而下方法)开始,这有助于我决定如何最好地规范化。