Перечень статей   Choose language


Композиции рафинирования

Виды композиций

Распорка - это два внешних ключа, соединяющих три таблицы: ссылающиеся поля находятся в одной промежуточной таблице.

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"), указывается вторым (ссылающиеся поля могут быть одноименными). Синтаксис распорки состоит из трех звеньев и выглядит так:
.a.b#ref1:ref3.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
);
Синтаксис стяжки состоит из трех звеньев и выглядит так:
.a#ref1.b.c#ref3.

Перекресток - это два внешних ключа, соединяющих две таблицы в противоположных направлениях: одно ссылающееся поле находится в одной таблице и ссылается на первичный ключ второй таблицы, другое ссылающееся поле находится во второй таблице и ссылается на первичный ключ первой таблицы.

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интаксиса перекрестка (каждый из двух звеньев).
.a#ref.b.

.a.b#lnk.

Разветвление - это два внешних ключа, соединяющих три таблицы: ссылающиеся поля ссылаются на одну обрамляющую таблицу

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

Комбинированный ключ

Если внешний ключ состоит из нескольких полей, то в рафинировании эти поля перечисляются через знак умножения.

a.b#b1*b2*b3.c

P.S.

Статья является руководством по реализации идей с.39-48 pdf-документа.



Тюрин Дмитрий, dmitryturin@yandex.ru



Перечень статей   Choose language


Используются технологии uCoz