Исходя из того, что яккрилин злодей из иллиной креветки-скриллина:
CREATE TABLE (points) points_id INT
FOREIGN KEY(man_id) REFERENCES mans(PrimaryKeyField)
ON DELETE CASCASDE ON UPDATE CASCASDE
Вот пример из реальной жизни.Допустим, у вас есть люди, которые направляют вам бизнес: ваши сотрудники, ваши друзья, местные компании, где вы делаете рекламу, и т. Д. Клиенты, которые приходят, называются «реферальными».Каждый человек считается только одним рефералом, но реферер может отослать много рефералов (например, сотрудник может отослать 20 новых клиентов; сотрудник является вашим реферером, а сотрудник сделал 20 рефералов).Итак, у вас есть 1 рефери и 20 рефералов (один ко многим):
CREATE TABLE referal(
referal_id INTEGER UNIQUE NOT NULL PRIMARY KEY, //A customer can only be 1 referal.
referal_method TEXT, //How were they refered? By phone?
referer_id INTEGER , //Who refered them?
FOREIGN KEY(referer_id) REFERENCES referer(referer_id)); //Trace more about referer.
Возможно, что реферал ссылается более чем на одного человека, но я думаю, что это стандартная практика ведения бизнеса.компенсировать только одного рефери.Таким образом, вам никогда не нужно указывать двух судей.Это всегда будет отношение 1 к 1 или 1 к многим;поэтому вы должны составить таблицу «1 ко многим».Я не очень хорошо разбираюсь в CASCADE, но я постараюсь выяснить, как это подходит.
На первый взгляд кажется, что ON UPDATE CASCADE ON DELETE CASCADE
не относится к моему ответу, потому что удаление последнего реферала должноне удалить реферера.
Глядя на другой пример :
CREATE TABLE all_candy
(candy_num SERIAL PRIMARY KEY,
candy_maker CHAR(25));
CREATE TABLE hard_candy
(candy_num INT,
candy_flavor CHAR(20),
FOREIGN KEY (candy_num) REFERENCES all_candy
ON DELETE CASCADE)
Если вы удаляете леденец из таблицы hard_candy
, то вы также удаляетеэто из таблицы all_candy
, потому что карамель - это разновидность конфет, а если тип конфет изменился (например, на прекращенные конфеты), то в любом случае необходимо выполнить новую команду INSERT.
Я запустил тестовый пример для ON UPDATE CASCADE и ON UPDATE DELETE в sqlite3, и, похоже, это не имеет никакого эффекта.Возможно, они не работают с механизмом db по умолчанию для sqlite3, но функциональность перечислена на официальном веб-сайте SQLite: очень наглядный и простой в использовании пример ON UPDATE CASCADE от sqlite.org .Прочитайте и посмотрите, что вы думаете.
Это схема, которую я использовал для моего теста:
BEGIN TRANSACTION;
CREATE TABLE candy(id integer primary key not null, name text, description text);
INSERT INTO candy VALUES(1,'Laffy Taffy', 'Delicious, soft candy.');
INSERT INTO candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;
BEGIN TRANSACTION;
CREATE TABLE hard_candy(id integer primary key not null, name text, description text, foreign key(id,name,description) references hard_candy ON DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO hard_candy VALUES(2,'Pop Rocks', 'A candy that explodes in your mouth.');
COMMIT;
Запустил различные обновления в поле описания id-2 любой таблицы.