2014-06-07 60 views
0

我这样的东西有效吗?MySql我可以使用外键作为我的主键的一部分吗?

这些都是列在我的帐号表:

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) 
    ->) 
    -> ; 
+0

显示创建表'characters'。 –

+0

是的,你可以,然后它成为一个复合键。 – Rahul

+0

@Ravinder我曾经做过,但我编辑我的OP,以添加我认为我会做到这一点。 – user3521471

回答

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

+0

对,我的例子的外键是一个主键在不同的表中。所以没有模糊:P – user3521471

+0

@ user3521471,这些是一般指导原则。 – Rahul

相关问题