Как Флориан, мне больше нравится иметь тонны внешних ключей, чем иметь CHECK IN (..) - по простой причине: вы можете вставлять другие записи в свои таблицы.
Поддержка CHECK IN() гораздо большая проблема.Представьте себе этот сценарий:
CREATE TABLE street
(
id serial not null,
st_type varchar(20) not null,
st_name varchar(100) not null,
constraint street_pk primary key (id)
constraint street_type_check check st_type in ('STREET','AVENUE','SQUARE')
);
У вас есть 1000 строк с этими типами проверено, верно?Если вам нужно добавить еще один, вам нужно будет удалить ограничение и воссоздать его.
Если вы удалите элемент из этого списка, например, SQUARE, что произойдет с уже зафиксированными строками (и проверено в данный моментвставки), которые имеют этот тип?Они по-прежнему будут содержать недопустимый тип.
Таблицы и внешние ключи легче поддерживать и отслеживать.