PostgreSQL: Как реализовать минимальную кардинальность?

Как ответили в этом вопросе: Кардинальность в PostgreSQL, кардинальность обеспечивается с помощью ограничений.

Правила кардинальности определяют допустимые количества отношений - один-ко-многим, много-ко-многим и т.д. Множество ко многим достигается с помощью join-таблиц, а один ко многим - с помощью FOREIGN KEY.

Но как можно реализовать отношения один-ко-многим (один-к-1+). Это то же самое, что спросить: Как обеспечить минимальную кардинальность в PostgreSQL?

Практическая ситуация может возникнуть, когда нужно хранить, скажем, адрес (или номер телефона), который ДОЛЖЕН быть предоставлен (но может быть и больше одного) человеком (скажем, пользователем или клиентом).

Edit:

Вышеупомянутая ситуация является частным случаем (с кардинальностью один) общей проблемы. Общая проблема заключается в следующем: Как обеспечить кардинальность произвольного числа?

Как ответил jug, non-null FOREIGN KEY ссылка может быть использована как обходной путь, если минимальная кардинальность равна единице. Это также обеспечит дополнительную возможность выбора значения по умолчанию среди многих.

Но рассмотрим другую ситуацию взаимоотношений между командой по крикету и ее игроками. Каждая команда ДОЛЖНА иметь МИНИМУМ 11 игроков, чтобы считаться командой. Здесь минимальная кардинальность равна одиннадцати (11).

Аналогично, отношение между курсом и студентом в школе, где каждый студент ДОЛЖЕН посещать не менее 5 курсов, и каждый курс ДОЛЖЕН иметь МИНИМУМ 10 студентов.

10
задан Community 23 May 2017 в 12:32
поделиться