Есть таблица t, унаследовавшая потомков. Я хочу, чтобы вкладыши могли получать только дети. Каков наилучший способ заставить родительскую таблицу отклонять вставки?
create table t (c int);
create table t1 () inherits (t);
Это невозможно:
insert into t (c) values (1);
РЕДАКТИРОВАТЬ:
Я нашел визуальное решение модели в дополнение к решению @wildplasser:
create table tfk (c integer unique check(false));
create table t (c integer, foreign key (c) references tfk(c));
Теперь невозможно вставить в t
, ЕСЛИ это не нулевое значение, и все же возможно вставить в
его дочерние элементы. Это может быть хорошим решением, если этот столбец уже ограничен как не null
, но в противном случае недостаточно. Или кто-нибудь знает трюк, чтобы заставить вышеприведенное работать с нулевыми значениями?
Я запросил новый синтаксис в списке postgresql, и это было сделано для версии 9.2:
Разрешить Ограничения CHECK должны быть объявлены NO INHERIT (Нихил Сонтакке, Алекс Хансакер)
Это делает их применимыми только к родительской таблице, но не к дочерним.