Как предотвратить вставку в родительскую таблицу?

Есть таблица 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 (Нихил Сонтакке, Алекс Хансакер)

Это делает их применимыми только к родительской таблице, но не к дочерним.

9
задан Clodoaldo Neto 4 November 2014 в 08:00
поделиться