Спрашивали по поводу этого поста : почему именно логика предикатов?
Ну, например требуется в программе задать отношение "пользователь принадлежит группе".
Мы можем добавить таблице пользователей поле fk на таблицу групп, или в таблице групп добавить fk на таблицу пользователей, или создать новую таблицу для отношения многие-ко-многим, или организовать join-запрос или материализованное представление... Изменения, которые будут внесены при этом в реализацию системы в разных её слоях, могут быть весьма существенными, и пытаться их формально верифицировать (или как минимум легко понимать) весьма сложно и накладно. Однако в нашей думательной машинке, в модели системы в нашем уме, достаточно зафиксировать лишь одну абстракцию, один простейший предикат "пользователь принадлежит группе", который либо истинен, либо ложен.
Вот и всё.
P.S. И лучше уточнять "каждый пользователь принадлежит хотя бы одной/ровно одной группе" (чтобы исключить эти ваши кривейшие NULL), и требовать чтобы такой инвариант всегда был истинен, и т. п.
Post #660
798
- 🤔 9
- ✍ 7