У меня проблемы с созданием некоторых таблиц в SQLite - несоответствие внешнего ключа. Я хочу, чтобы две таблицы (время и узел) с автоматическим увеличением ID. В таблице узлов я буду ссылаться не на автоматически увеличенный идентификатор, а на другой столбец (NODE_ID). Однако, поскольку я хочу использовать столбцы таблицы Time в качестве одного большого первичного ключа, я подумал об использовании искусственного идентификатора и ссылки на него.
Исходя из этого и в этой документации , я создал столбец идентификатора, для которого мне не нужно устанавливать значения. Это работает. Однако после вставки строки в эту таблицу у меня возникают несоответствия внешнего ключа при добавлении строк в другие таблицы и попытке ссылки на недавно вставленную строку в Time.
Я хотел бы знать, почему ...
** Как добавить более одного внешнего ключа в таблицу? Это невозможно в SQLite? **
Мои таблицы:
CREATE TABLE Time (
ID integer NOT NULL,
SECOND integer NOT NULL,
MINUTE integer NOT NULL,
HOUR integer NOT NULL,
M_DAY integer NOT NULL,
MONTH integer NOT NULL,
YEAR integer NOT NULL,
W_DAY integer NOT NULL,
Y_DAY integer NOT NULL,
IS_DST integer NOT NULL,
SPAN integer NOT NULL,
PRIMARY KEY (ID, SECOND, MINUTE, HOUR, M_DAY, MONTH, YEAR, W_DAY, Y_DAY)
);
CREATE TABLE CpuUsage (
ID integer NOT NULL,
NODE_ID integer NOT NULL,
TIME_ID integer NOT NULL,
CORE_ID integer NOT NULL,
USER integer,
NICE integer,
SYSMODE integer,
IDLE integer,
IOWAIT integer,
IRQ integer,
SOFTIRQ integer,
STEAL integer,
GUEST integer,
-- /* Compound Primary Keys */
PRIMARY KEY(ID, NODE_ID, TIME_ID, CORE_ID)
-- /* Foreign keys */
FOREIGN KEY (NODE_ID)
REFERENCES Node(NODE_ID)
ON DELETE CASCADE
ON UPDATE CASCADE
FOREIGN KEY (TIME_ID)
REFERENCES Time(ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Node (
ID integer NOT NULL,
NODE_ID integer NOT NULL,
PRIMARY KEY (ID, NODE_ID)
);
Это, например, не работает ...
INSERT INTO Time (SECOND,MINUTE,HOUR,M_DAY,MONTH,YEAR,W_DAY,Y_DAY,IS_DST, SPAN) VALUES (13, 20, 13, 21, 11, 1011, 3, 354, 0, 0);
INSERT INTO CpuUsage (NODE_ID, TIME_ID, CORE_ID, USER, NICE, SYSMODE, IDLE, IOWAIT, IRQ, SOFTIRQ, STEAL, GUEST)
VALUES (1, 1, -1, 394784, 325834, 552058, 2334284, 136542, 2053, 3334, 0, 0 );