Для одной таблицы мне нужно ограничить дубликаты одного столбца вне области действия другого столбца.Postgresql: создать ограничение, отличное от области видимости
Например, учитывая таблицу demographics
, я хотел бы подчеркнуть, что email
уникален за пределами person_id
. Добавьте к этому упражнению, что обновления до demographics
записей невозможны с помощью бизнес-правил.
Учитывая этот набор данных на demographics
таблице:
id | email | city | person_id |
1 | [email protected] | Buffalo | 100 |
2 | [email protected] | Boston | 200 |
Как бы я изменить demographics
так, что эта вставка будет нормально:
INSERT INTO demographics (email, city, person_id) VALUES ('[email protected]', 'Miami', '100');
Но эта вставка будет поднимать ошибку:
INSERT INTO demographics (email, city, person_id) VALUES ('[email protected]', 'Buffalo', '100');
?
Извините, я не понимаю, почему второй должен потерпеть неудачу, но первый не должен. –
@a_horse_with_no_name Второй добавляет электронное письмо 'two @ email.com' человеку' 100', а 'two @ email.com' уже принадлежит человеку' 200'. –
Похож на нарушение BCNF (или даже 4NF). Ремоделирование приведет к тому, что {email, city, person_id} будет разбит на две или даже три таблицы. – wildplasser