Перечень статей   Терминология   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" must exist in output
.a.(b#ref1 | c#ref1).  -- either "b" or "c" must exist in output
... или ссылающиеся поля находятся в одной обрамляющей таблице
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+ref1.(b   c).  -- both "b"  and "c" must exist in output
.a#ref1,ref1.(b | c).  -- either "b" or "c" must exist in output

Продолжение

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

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" must exist in output
.(b.d#ref1 | c.d#ref3).  -- either "b" or "c" must exist in output
... или ссылающиеся поля находятся в двух обрамляющих таблицах
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" must exist in output
.(b#ref1 | c#ref3).d.  -- either "b" or "c" must exist in output

P.S.

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

a.b#b1*b2*b3.c

Тюрин Дмитрий



Перечень статей   Терминология   Choose language