MySql我可以使用外键作为主键的一部分吗?

时间:2014-06-07 18:01:25

标签: mysql sql foreign-keys primary-key

我这样的东西有效吗?

这些是我的ACCOUNTS表中的列:

user_id (Primary Key)
user_name
user_pass
user_email
user_date

允许帐户拥有多个字符。继承人我想写那个表: 字符表:

character_ID
user_ID (foreign key)
character_name
...(random columns)

我可以制作PRIMARY KEY(character_ID,user_ID)吗? 或者有更好的方法来区分这个吗?

编辑:这是我如何创建表格:

CREATE TABLE characters(
    -> char_id INT(8) NOT NULL AUTO_INCREMENT,
    -> char_name VARCHAR(50) NOT NULL,
    -> user_id INT(8) 
    -> PRIMARY KEY(char_id, user_id),
    -> FOREIGN KEY (user_id) REFERENCES users(user_id)
    -> )
    -> ;

1 个答案:

答案 0 :(得分:1)

是的,您可以将两个(char_id,user_id)作为字符表中的主键 然后它变成一个复合键,但foreign key允许重复,因此 它们可能不是最好用作主键。

因此,通常建议和最佳做法是使用可以唯一的字段 确定记录中的所有其他字段,并将其指定为primary key

它可以是synthetic,例如MySQL中的auto_increment,SQL Server中的IDENTITY。 或者它可以是正常/一般的"社会安全号码"等

所以,在你的情况下,如果char_id可以单独唯一地确定所有其他字段,那么我会做 它为PK char_id INT NOT NULL AUTO_INCREMENT primary key