帮助数据库设计

时间:2010-02-02 20:20:09

标签: mysql database database-design

我想为我正在开发的一个小项目设计数据库表的一些建议。假设在这个系统中我有articlessubarticlescomments

每篇文章都有子文章。文章和子文章都可以有评论。我认为每个表都有一个autoincrementing int主键(即articleId,subarticleId和commentId)。子文章将有一个articleId作为Article表等的外键。

但出于某些原因,我想要一个全球唯一ID的概念。实现这个的最佳方法是什么?我应该在每个表中都有一个uuid主键,并使用前面提到的Id列作为常规列(因为我仍然希望与每个对象关联的逻辑编号)?或者我应该制作某种包含object

的主uuid映射表

任何有关实施此方法的好方法的建议都将受到赞赏!

2 个答案:

答案 0 :(得分:5)

我只有表ArticleComment,而Article表将有一个空的ParentArticleID字段。

Article
-------
ArticleID (int PK)
ParentArticleID (nullable int FK)
...

Comment
-------
CommentID (int PK)
ArticleID (int FK)
...

如果确实需要GUID,请不要将其用作PK,因为索引编制时效果不佳。为GUID创建单独的字段。

答案 1 :(得分:3)

保持简单。

如果您必须拥有UUID,请不要将其作为主键。由于您还希望拥有唯一的数字标识符,因此复杂且难以跟踪。如果需要,只需要一个单独的UUID字段。

那么,现在你有文章和评论(子文章只是另一篇文章,没有?)。文章有article_id,评论有comment_id。两个标识列。

Pseudo Defs in Transact SQL
table Article (
    article_id bigint identity not null
,   parent_id  bigint null   --populate for child or sub articles
,   object_id  uuid not null
,   constraint article_pk primary key (article_id)
)

table Comment (
    comment_id bigint identity not null
,   article_id bigint not null --assuming comments MUST have an article YMMV
,   object_id  uuid not null
,   constraint comment_pk primary key (comment_id)
,   constraint comment_article_fk foreign key (article_id) 
    references Article (article_id)      
)