У вас будет две таблицы, возможно, с столбцом в качестве псевдонима столбца rowid , это
например
CREATE TABLE persons (
personid INTEGER PRIMARY KEY,
personname TEXT
);
CREATE TABLE orders (
orderid INTEGER PRIMARY KEY,
ordername TEXT,
person_reference INTEGER REFERENCES persons(personid)
);
- Обратите внимание , что вам нужно включить обработку внешнего ключа, например, выполнив
PRAGMA foreign_keys = ON;
(или true).См. PRAGMA foreign_keys - в кодировке SQLite
column_name INTEGER PRIMARY KEY
определяет этот столбец как псевдоним rowid столбец , и если значение не являетсядля столбца при вставке, тогда будет назначено целочисленное значение.Начальное значение для первой строки будет равно 1, последующие значения будут , как правило, на 1 больше, чем наибольшее значение rowid (прочитайте ссылку выше, чтобы узнать, почему слово обычно использовалось).
Если вы попытаетесь вставить ордер для несуществующего персоны, вы получите конфликт с внешним ключом.
Альтернативой определению на уровне столбца будет определениевнешний ключ (и) на уровне таблицы, например,
CREATE TABLE orders (
orderid INTEGER PRIMARY KEY,
ordername TEXT,
person_reference INTEGER,
FOREIGN KEY (person_reference) REFERENCES persons(personid)
);
В качестве примера рассмотрим следующее: -
INSERT INTO persons (personname) VALUES
('Fred'),
('Mary'),
('Sue'),
('Tom')
;
INSERT INTO orders (ordername, person_reference) VALUES
('Order 1 for Fred',1),
('Order 2 for Sue',3),
('Order 3 for Fred',1),
('Order 4 for Mary',2)
;
INSERT into orders (ordername, person_reference) VALUES
('Order 5 for nobody',100);
Результат будет: -
INSERT INTO persons (personname) VALUES ('Fred'),('Mary'),('Sue'),('Tom')
> Affected rows: 4
> Time: 0.453s
INSERT INTO orders (ordername, person_reference) VALUES
('Order 1 for Fred',1),('Order 2 for Sue',3),('Order 3 for Fred',1),('Order 4 for Mary',2)
> Affected rows: 4
> Time: 0.084s
INSERT into orders (ordername, person_reference) VALUES
('Order 5 for nobody',100)
> FOREIGN KEY constraint failed
> Time: 0s
т. Е. Последний, поскольку в таблице персон нет строки с персоной 100, то последняя вставка (на собственной демонстрации) завершается неудачей.
Возможно, вы захотитесм. Поддержка внешнего ключа SQLite