【发布时间】:2018-07-17 14:10:24
【问题描述】:
我将 SQLite3 用于简单的应用程序(如议程)。议程是多语言的。这就是为什么我有更多语言的桌子的原因(语言的数量必须是独立的)
起初,我有一个表rooms,其定义如下:
CREATE TABLE rooms
(
room_code VARCHAR2(32),
lang_code CHAR(2),
room_name VARCHAR(32),
PRIMARY KEY (room_code, lang_code),
FOREIGN KEY (lang_code) REFERENCES languages (lang_code),
CHECK (LENGTH(lang_code) = 2),
CHECK (room_code <> '')
);
然后我有一个表 events 具有以下定义:
CREATE TABLE events
(
room_code VARCHAR2(32) NOT NULL,
message_code VARCHAR(64) NOT NULL,
time_start DATETIME NOT NULL ,
time_end DATETIME NOT NULL,
PRIMARY KEY (message_code, room_code),
FOREIGN KEY (room_code) REFERENCES rooms (room_code),
-- Check the time is between 00:00 and 23:59
CHECK (time_start and time_end BETWEEN TIME('00:00') AND TIME('23:59')),
-- Start time must be lower than end time
CHECK (time_start < time_end),
-- Message code cannot be empty
CHECK (message_code <> '')
);
但事实上,我在任何插入尝试中都遇到了这个错误:
Error: near line 91: foreign key mismatch - "events" referencing "rooms"
为什么我不能引用另一个表?我读到表 B 的所有外键都必须是表 A 中的 PRIMARY KEY。但是这种依赖对我来说是可以的。来自表 events 的外键 room_code 它也是表 rooms 中的主键 room_code。
这可能不是 TRIGGERS 的解决方案吗?事实上,如果可能的话,我想使用 KEYS 而不是 TRIGGERS。谢谢
最好的问候
【问题讨论】:
标签: sql sqlite foreign-keys primary-key