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

标签 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)

我可以设置我的主键(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)
    -> )
    -> ;

最佳答案

是的,您可以将(char_id,user_id)作为字符表中的主键, 那么它就成为一个复合键,但外键允许有重复项,因此 它们可能不适合用作主键。

因此,通常建议和最佳实践是使用可以唯一地 确定记录中的所有其他字段并将其指定为主键

它可以是一个合成,例如(MySQL 中的auto_increment,SQL Server 中的IDENTITY)。 或者它可以是正常/一般的,如“社会安全号码”等。

因此,在您的情况下,如果 char_id 可以单独唯一地确定所有其他字段,那么我会做 它作为 PK char_id INT NOT NULL AUTO_INCRMENT 主键

关于MySql 我可以使用外键作为主键的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100124/

相关文章:

mysql - 有什么方法可以使用 mysqlimport 选项卡选项禁用外键检查?

mysql - 服务堆栈 OrmLite : MySQL connection pool

mysql - 使用 WHERE 和 AND 参数的 LEFT JOIN

MySQL 查询获取属于某个组织的所有用户

sql - 如何从 SQL Server 2012 表中删除或更改 dbo 前缀?

php - 这是Mysql外键的工作吗?

MySQL外键名称问题

mysql - 我正在尝试为我的 laravel 网站获取最近的聊天记录。但查询返回错误的输出

php - 从php中的MySQL函数检索返回值

sql - TSQL 根据最大​​的其他列的组合检索最大行