我正在尝试创建一个数据库,其中包含来自游戏的分配信息,但在创建带有分配主键和外键的表时遇到问题。任何帮助都会很棒。
我收到的错误代码是:#1215 - 无法在表 Boss 上添加外键约束。它很好地创建了第一个表它只是停止工作并在创建表 boss 时在外键处抛出错误。
在项目表中,Boss 字段需要能够为多个不同的项目输入相同的数据。
CREATE TABLE item ( ID SERIAL, Name VARCHAR(35), Boss VARCHAR(25), Type VARCHAR(20), Slot VARCHAR(20), PRIMARY KEY (Name,Boss) );
CREATE TABLE boss ( ID SERIAL, Boss VARCHAR(25), Type VARCHAR(20), Location VARCHAR(20), Difficulty INT, PRIMARY KEY (ID, Location), FOREIGN KEY (Boss) REFERENCES item(Boss) );
CREATE TABLE dungeon ( ID SERIAL, Name VARCHAR(25), Location VARCHAR(20), Rating INT, PRIMARY KEY (Name), FOREIGN KEY (Location) REFERENCES boss(Location) );
最佳答案
我可以看到您的数据库创建脚本有很多问题,但我只会坚持那些会立即影响它首先开始工作的问题:
您应该始终通过主键而不是其他任何方式引用另一个表。
您的引用资料放在了错误的表格中。如果您想从“项目”中引用“老板”,那么您应该这样做,而不是从“老板”中引用“项目”。
但最重要的是引用应该与它们引用的主键属于同一类型。
当您真的不需要时,复合键不是一个好主意。
因此,一个工作脚本将是:
CREATE TABLE dungeon ( ID BIGINT(20), Name VARCHAR(25), Location VARCHAR(20), Rating INT, PRIMARY KEY (ID) );
CREATE TABLE boss ( ID BIGINT(20), Type VARCHAR(20), LocationId BIGINT(20), Difficulty INT, PRIMARY KEY (ID), FOREIGN KEY (LocationId) REFERENCES dungeon (ID) );
CREATE TABLE item ( ID BIGINT(20), Name VARCHAR(35), BossId BIGINT(20), Type VARCHAR(20), Slot VARCHAR(20), PRIMARY KEY (ID), FOREIGN KEY (BossId) REFERENCES boss (ID) );
您可以根据需要进行调整,但在此之前,我建议您阅读一本关于数据库设计的好书,或者 - 至少 - 一本关于基本关系数据库原理的教程。
关于mysql - 外键约束错误 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702943/