Перечень статей   Терминология   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:ref1.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
);
Существуют два не эквивалентных пайщика перекрестка.
.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).
.a.(b/ref1,c/ref1).
... или ссылающиеся поля находятся в одной обрамляющей таблице
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).
.a/ref1,ref1.(b,c).

Продолжение

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

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).
.(b.d/ref1,c.d/ref3).
... или ссылающиеся поля находятся в двух обрамляющих таблицах
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.
.(b/ref1,c/ref3).d.

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



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