你对这本杂志的想法 - 我设计的数据库?

时间:2009-11-17 14:16:23

标签: database-design

我很感激你写一篇关于这个我在线杂志设计的数据库的建议:

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

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)

1 个答案:

答案 0 :(得分:0)

你的设计看起来很稳固。

确保不能为NULL的列被约束为NOT NULL。

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

  • 不要使用“tb_”为表名添加前缀 - 这是多余的。我们知道它是一个表,因为它被用于使用表的地方,例如from子句和insert或update语句。
  • 我更喜欢为他们所代表的东西命名。如果实体代表文章,则将表命名为“文章”。换句话说,使用单数名称。以这种方式思考 - 如果我查询表并返回一行,我将得到什么?一篇文章。如果我要回到一行,其中包含一系列文章,我会将这些文章命名为。 (但是,没有“正确”的方式 - 很多人不同意,并且更愿意用复数名称命名他们的桌子)
  • 您可能会考虑不在ID列的前面加上表名。我们知道它是article_id,因为它在文章表中。但是,在这里,很多人不同意,并且不希望在每个表格中看到“ID”列。