【发布时间】:2014-09-23 16:52:24
【问题描述】:
我已经计划这个网站有一段时间了,几周前开始整理它,我会说事情进展得非常好,直到有一天我被介绍给规范化。我花了很长时间才弄清楚它是什么以及为什么需要它,但我认为我现在已经接近实现我的总体目标了。
所以场景是我有一个网站,成员可以加入并建立自己的报纸/博客并为其分配作者。该网站主要由members_table、authors_table、newspapers_table 和posts_table 组成,我已经通过并标准化得到:
成员
+----+-----------+----------+-----------------+----------+----------+------------+------------+
| ID | FIRSTNAME | SURNAME | EMAIL | USERNAME | PASSWORD | AVATAR | JOINED |
+----+-----------+----------+-----------------+----------+----------+------------+------------+
| 01 | Brian | Griffin | brian@gmail.com | briang | *** | hdhs.jpg | 2014-07-31 |
| 02 | Meg | Griffin | meg@gmail.com | megg | *** | | 2014-07-31 |
| 03 | Peter | Griffin | peter@gmail.com | peterg | *** | jaunsq.jpg | 2014-07-31 |
| 04 | Glen | Quagmire | glen@gmail.com | glen | *** | | 2014-07-31 |
+----+-----------+----------+-----------------+----------+----------+------------+------------+
作者
+----+-----------+----------+-----------------+-------------------+---------+----------+---------+
| ID | FIRSTNAME | SURNAME | EMAIL | BIO ( REQUIRED ) | TWITTER | FACEBOOK | WEBSITE |
+----+-----------+----------+-----------------+-------------------+---------+----------+---------+
| 01 | Brian | Griffin | brian@gmail.com | About me... | URL | | URL |
| 02 | Meg | Griffin | meg@gmail.com | About me... | URL | | |
| 03 | Peter | Griffin | peter@gmail.com | About me... | | URL | URL |
| 04 | Glen | Quagmire | glen@gmail.com | About me... | URL | URL | |
+----+-----------+----------+-----------------+-------------------+---------+----------+---------+
** 这里应该分解社交吗?如果有,怎么做?
Newspaper_Categories
+----+-------------------+
| ID | CATEGORY |
+----+-------------------+
| 01 | Lifestyle |
| 02 | Auto Mobiles |
| 03 | Entertainment |
| 04 | Food & Drink |
| 05 | Internet |
+----+-------------------+
报纸
+----+-----------------------+----------+---------+------------------+------------------+
| ID | NAME | CATEGORY | AVATAR | BIO ( REQUIRED ) | OWNER ( MEMBER ) |
+----+-----------------------+----------+---------+------------------+------------------+
| 01 | Spooner Street Weekly | 01 | 311.jpg | About Us... | 01 |
| 02 | A Dogs Life | 01 | | About Us... | 01 |
| 03 | In The Kitchen | 04 | js.jpg | About Us... | 02 |
+----+-----------------------+----------+---------+------------------+------------------+
所有者应该去这里还是在名为 Newspaper_Owners 的表中
社交
+----+-------------------+
| ID | TYPE |
+----+-------------------+
| 01 | Facebook |
| 02 | Twitter |
| 03 | Google |
| 04 | Flickr |
| 05 | Youtube |
+----+-------------------+
Newspaper_Socials
+----------+--------+------+
| NEWSAPER | SOCIAL | LINK |
+----------+--------+------+
| 01 | 01 | URL |
| 01 | 02 | URL |
| 01 | 05 | URL |
| 01 | 01 | URL |
| 02 | 02 | URL |
| 02 | 04 | URL |
| 03 | 01 | URL |
+----------+--------+------+
Post_Categories
+-------------------+--------------------+
| ID | NEWSPAPER_ID | CATEGORY |
+----+--------------+--------------------+
| 01 | 01 | Glens Girls |
| 02 | 01 | In The Clam |
| 03 | 01 | Peters Shenanigans |
| 04 | 02 | Martini Recipes |
| 05 | 03 | Housewife Tips |
+----+--------------+--------------------+
帖子
+----+----------+-------+---------+----------+------------+-------+
| ID | CATEGORY | TITLE | ARTICLE | FEATURED | ADDED | VIEWS |
+----+----------+-------+---------+----------+------------+-------+
| 01 | 01 | Title | Article | 0 | 2014-07-31 | 200 |
| 02 | 01 | Title | Article | 0 | 2014-07-31 | 220 |
| 03 | 03 | Title | Article | 1 | 2014-07-31 | 232 |
| 04 | 05 | Title | Article | 0 | 2014-07-31 | 143 |
| 05 | 05 | Title | Article | 1 | 2014-07-31 | 311 |
+----+----------+-------+---------+----------+------------+-------+
Post_Photos
+---------+-----+--------------+------+
| POST_ID | ALT | PHOTOGRAPHER | LINK |
+---------+-----+--------------+------+
| 01 | Alt | John Smith | URL |
| 02 | Alt | | |
| 03 | Alt | Mike Jones | |
| 05 | Alt | Adam West | URL |
+---------+-----+--------------+------+
Post_Keywords
+---------+---------+
| POST_ID | KEYWORD |
+---------+---------+
| 01 | Keyword |
| 01 | Keyword |
| 01 | Keyword |
| 01 | Keyword |
| 02 | Keyword |
| 02 | Keyword |
| 03 | Keyword |
| 03 | Keyword |
| 03 | Keyword |
+---------+---------+
如果每个帖子只允许3个关键字,可以在Posts表的末尾添加吗?
Author_Posts
+-----------+---------+
| AUTHOR_ID | POST_ID |
+-----------+---------+
| 01 | 01 |
| 01 | 02 |
| 01 | 03 |
| 02 | 04 |
| 03 | 05 |
+-----------+---------+
谁能告诉我我是否在这个结构的正确路线上,并给我一些关于Primary Keys和Foreign Keys ???应该去哪里的指示?
【问题讨论】:
-
是的。绝对朝着正确的方向前进。例如,(author_id,post_id) 是一个自然的复合键。它是该表上唯一的键,它应该是 PRIMARY。或者,您可以将其视为唯一键并具有代理主键(例如
author_posts_id),但这只有在您必须在其他上下文中引用该表时才有意义 - 其中,在这种情况下,不太可能。同样,(post_id,keyword) 也应该是 PRIMARY -
谢谢@Strawberry!你认为
facebook, twitter & website应该存在于Authors表上吗?我的意思是它们只与那个 author_id 相关? -
如果您使用表格前缀命名关键列,对您和我们都有帮助。即
MembersID而不仅仅是ID。您的结果在多表查询中也会更加清晰。
标签: mysql database database-design mysqli normalization