2009-11-17 43 views
0

这是我明白,写下你对这个数据库的建议,我有一个在线杂志的设计:您对我设计的这本杂志数据库的想法?

- 一篇文章可以属于很多类别。
- 一篇文章可以有空或许多照片。
- 一篇文章可以有空或许多标签。

Table: `tb_categories` 
Columns: 
`cat_id` (Primary Key) 
`catname` 
`parent_id` 

Table: `tb_articles` 
Columns: 
`article_id`(Primary Key) 
`title` 
`subtitle` 
`textbody` 
`source_id` 
`date` 
`remark` 

Table: `tb_sources` 
Columns: 
`source_id` (Primary Key) 
`sourcename` 

Table: `tb_photos` 
Columns: 
`photo_id` (Primary Key) 
`photofilename` 

Table: `tb_tags` 
Columns: 
`tag_id` (Primary Key) 
`tagname` 

Table: `tb_articles_photo` 
Columns: 
`article_id` (Foreign Key) 
`photo_id` (Foreign Key) 

Table: `tb_articles_tags` 
Columns: 
`article_id` (Foreign Key) 
`tag_id` (Foreign Key) 

`tb_articles_categories` 
Columns: 
`article_id` (Foreign Key) 
`cat_id` (Foreign Key) 
+0

null,你的意思是零? – recursive 2009-11-17 14:20:14

+1

有什么建议?你问这个设计是否“正确”?或者如何实现设计? – 2009-11-17 14:23:45

+1

我也没有。我会尽我所能来帮助他进行编辑。 – mauris 2009-11-17 14:24:24

回答

0

您的设计看起来很稳固。

确保不能为NULL的列被限制为NOT NULL。

每个人都有这些事情不同的想法,但我的建议:

  • 不要前缀名的表名“tb_” - 它是多余的。我们知道这是一个表格,因为它被用于表格被使用的地方,例如从子句和插入或更新语句。
  • 我更喜欢为他们代表的内容命名表。如果实体代表一篇文章,则将该表命名为“文章”。换句话说,使用单数名称。想想这样 - 如果我查询表格并得到一行,我会得到什么?一篇文章。如果我得到一行包含文章集合的行,我会列出表格文章的名称。 (但是,没有“正确”的方式 - 很多人不同意,并且喜欢用复数名称命名表)
  • 您可能会考虑不在表名称中加上前缀。我们知道这是一篇article_id,因为它在文章表中。然而,这里又有很多人不同意,也不想在每个表格中看到“ID”列。