2011-09-26 57 views
2

我已经阅读了某些地方,通常对大多数MySQL表使用自动递增主键,而不是简单地依赖非增量字段,这将被强制为唯一的。要在MySQL中使用自动增量吗?

我的问题是关于一个用户表格,以及一个通过外键连接到它的表格。这里是模式:

TABLE Users { 
    id 
    name 
    ... 
} 

TABLE Authors { 
    user_id (FK) 
    author_bio 
} 

作者表也应该有自己的自动递增主键,或者它应该依赖于user_id外键作为主键?

ALSO

是否有明显的性能理由不使用自动递增的ID作为主?

+1

使用'USERS'表的主键作为'作者的主键'表格表示1:1的关系。规范化(3NF?)规定在这种情况下不应该有两个表。添加一个单独的主键(自动增量与否)不会改变... –

+0

OMG - 用户可能是作者,但作者将是用户。你是这个意思吗? – johnnietheblack

+0

不,如果只有一个USER与一个AUTHOR记录相关 - 即1:1。这个决定取决于你的业务规则,但作者被认为有假名(别名) - IE:史蒂文金写为理查德巴赫曼 –

回答

3

它不是 - 或者。如果您使用自动递增主键,并且您有需要强制约束的候选键,那么您的模式应该同时具有这两个键。

您的userauthor表都应该有单独的主键。 (每个表都必须有一个主键。)我不会使用外键作为主键。如果确实如此,我就不会有一个单独的作者表;我会把这些列放在用户表中。

PS - 我对表格的命名偏好是单数。它应该是userauthor表。它们恰好包含多行,但单行意味着一个实体。

+0

所以你说有一个自动递增的小学,然后是外国很酷,即使外国是独特的,可以(技术上)作为主要?有一些关于每个表有一个我喜欢的自动递增键的一致性。 – johnnietheblack

+0

Duffy,谢谢你的阐述......我在想,我同意你的想法......感觉更干净的东西知道每个表将具有主键类型的通用线程 – johnnietheblack

1

您绝对希望Authors表具有自己的主键,如authors_id,然后将user_id作为外键。

+0

你能详细说明为什么,所以我可以得到它的要点吗? – johnnietheblack

1

这取决于你想完成什么。如果每个作者都映射到一个用户(并且您确信这不会改变),那么您可以将user_id作为主键。如果不是,则需要一个独立的主键Authors

(请注意,反向关系并不一定是真实的:不是每个用户都映射到一个作者。)