【发布时间】:2014-05-26 13:21:00
【问题描述】:
我有 3 张桌子:
CREATE TABLE World_Type (
Name_ varchar (15) NOT NULL,
Skills varchar (30),
Bonus varchar (30),
Penalty varchar (30),
Description varchar (90),
PRIMARY KEY (Name_) );
CREATE TABLE Class (
Class_name varchar (30) NOT NULL,
Description varchar (50),
PRIMARY KEY (Class_name) );
CREATE TABLE character_ (
Name_ varchar (30) NOT NULL,
Class varchar (30),
World_Type varchar (15),
Str integer ,
WS integer ,
BS integer ,
Fel integer ,
Per integer ,
Int_ integer ,
Agi integer ,
WP integer ,
Tough integer ,
PRIMARY KEY (Name_) ,
FOREIGN KEY (Class) REFERENCES Class(Class_name),
FOREIGN KEY (World_Type) REFERENCES World_Type(Name_) );
CREATE TABLE world_class_requirements (
World_Type varchar (15) NOT NULL,
Class_name varchar (30) NOT NULL,
PRIMARY KEY (World_Type, Class_name),
FOREIGN KEY (World_Type) REFERENCES World_Type(Name_),
FOREIGN KEY (Class_Name) REFERENCES Class(Class_name) );
在character_中创建一个人时,它应该检查它是否可能有正确的组合,如果条件正确则插入,如果不正确则出错。但是,即使我故意插入无效的 worl_type 和 class 组合,它仍然会插入 character_ 表中。
world_class_requirements 中的值是:
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Feral World','Assassin');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Feral World','Guardsman');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Feral World','Imperial Psyker');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Feral World','Scum');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Arbitrator');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Assassin');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Cleric');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Guardsman');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Imperial Psyker');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Scum');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Hive World','Tech-Priest');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Adept');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Arbitrator');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Assassin');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Cleric');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Guardsman');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Imperial Psyker');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Scum');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Imperial World','Tech-Priest');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Adept');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Arbitrator');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Assassin');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Cleric');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Imperial Psyker');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Scum');
INSERT INTO world_class_requirements (World_Type, Class_name) VALUES (
'Void Born','Tech-Priest');
例如,不应允许“熟练”类来自 world_type“野性世界”,但它仍然接受它。
我在这里做错了什么?
【问题讨论】:
-
一个 minimal 示例会很有帮助;) - 关于您的问题:您在哪里插入 character_ 与 world_class_requirements 进行检查?您的密钥只会阻止您将不在 class 或 World_type 中的内容插入到 world_class_requirements 中。
-
啊,我明白了,所以我直接使用从 character_ 到 class 和 world_type 的键,而不是通过 world_class_requirements,对吗?
标签: mysql foreign-key-relationship key-value-store