Композиции рафинирования
Виды композиций
Распорка - это два внешних ключа, соединяющих три таблицы:
ссылающиеся поля находятся в одной промежуточной таблице.
create table a (
id num primary key,
data float
);
create table b (
id num primary key,
ref1 num references a(id), -- important
ref2 num references a(id), -- ballast
ref3 num references c(id), -- important
ref4 num references c(id), -- ballast
data float
);
create table c (
id num primary key,
data float
);
Рафинирование состоит из двух полей, перечисленных через двоеточие:
поле, ссылающееся на предыдущую секцию ("a"), указывается первым;
поле, ссылающееся на последующую секцию ("c"), указывается вторым
(ссылающиеся поля могут быть одноименными).
Синтаксис распорки состоит из трех звеньев и выглядит так:
Стяжка - это два внешних ключа, соединяющих три таблицы:
ссылающиеся поля ссылаются на одну промежуточную таблицу.
create table a (
id num primary key,
ref1 num references b(id), -- important
ref2 num references b(id), -- ballast
data float
);
create table b (
id num primary key,
data float
);
create table c (
id num primary key,
ref1 num references b(id), -- important
ref2 num references b(id), -- ballast
data float
);
Синтаксис стяжки состоит из трех звеньев и выглядит так:
Перекресток - это два внешних ключа,
соединяющих две таблицы в противоположных направлениях:
одно ссылающееся поле находится в одной таблице и ссылается на первичный ключ второй таблицы,
другое ссылающееся поле находится во второй таблице и ссылается на первичный ключ первой таблицы.
create table a (
id num primary key,
ref num references b(id),
data float
);
create table b (
id num primary key,
lnk num references a(id),
data float
);
Существуют два не эквивалентных cинтаксиса перекрестка
(каждый из двух звеньев).
Разветвление - это два внешних ключа, соединяющих три таблицы:
ссылающиеся поля ссылаются на одну обрамляющую таблицу
create table a (
id num primary key,
data float
);
create table b (
id num primary key,
ref1 num references a(id), -- important
ref2 num references a(id), -- ballast
data float
);
create table c (
id num primary key,
ref1 num references a(id), -- important
ref2 num references a(id), -- ballast
data float
);
(синтаксис разветвления:)
.a.(b#ref1 c#ref1). -- both "b" and "c" are required
.a.(b#ref1 | c#ref1). -- "b", or "c", or both are required
... или ссылающиеся поля находятся в одной обрамляющей таблице
create table a (
id num primary key,
ref1 num references b(id), -- important
ref2 num references b(id), -- ballast
ref3 num references c(id), -- important
ref4 num references c(id), -- ballast
data float
);
create table b (
id num primary key,
data float
);
create table c (
id num primary key,
data float
);
(синтаксис разветвления:)
.a#ref1+ref3.(b c). -- both "b" and "c" are required
.a#ref1^ref3.(b | c). -- "b", or "c", or both are required
Продолжение - это два внешних ключа, соединяющих три таблицы:
ссылающиеся поля ссылаются на две обрамляющие таблицы
create table b (
id num primary key,
data float
);
create table c (
id num primary key,
data float
);
create table d (
id num primary key,
ref1 num references b(id), -- important
ref2 num references b(id), -- ballast
ref3 num references c(id), -- important
ref4 num references c(id), -- ballast
data float
);
(синтаксис продолжения:)
.(b.d#ref1 c.d#ref3). -- both "b" and "c" are required
.(b.d#ref1 | c.d#ref3). -- "b", or "c", or both are required
... или ссылающиеся поля находятся в двух обрамляющих таблицах
create table b (
id num primary key,
ref1 num references d(id), -- important
ref2 num references d(id), -- ballast
data float
);
create table c (
id num primary key,
ref1 num references d(id), -- important
ref2 num references d(id), -- ballast
data float
);
create table d (
id num primary key,
data float
);
(синтаксис продолжения:)
.(b#ref1 c#ref3).d. -- both "b" and "c" are required
.(b#ref1 | c#ref3).d. -- "b", or "c", or both are required
Комбинированный ключ
Если внешний ключ состоит из нескольких полей,
то в рафинировании эти поля перечисляются через знак умножения.
P.S.
Статья является руководством по реализации идей
с.39-48
pdf-документа.
Тюрин Дмитрий, dmitryturin@yandex.ru
Используются технологии
uCoz