Притворись У меня есть таблица пользователей, где пользователи являются членами конкретного арендатора, а также их электронные письма однозначно индексируются их арендатору, как это:Postgres условное ограничение уникальности
User
id | tenant_id | email
1 1 [email protected]
2 1 [email protected]
Этот пользователь может потому, что, несмотря на дубликат электронной почты, они находятся на другом арендатора:
3 2 [email protected]
Этот пользователь предотвращено потому, что электронная почта является дубликатом в то же арендатор:
4 2 [email protected] <--- will throw an error
У нас это очень покрыто уникальным индексом - эта часть проста.
Теперь притворите, что я хочу иметь возможность добавлять глобального пользователя, который может получить доступ ко всем арендаторам, но только в том случае, если электронное письмо еще не существует в таблице. Кроме того, как только запись будет существовать, никто другой, будь то арендатор или нет, сможет использовать одно и то же электронное письмо.
Для большей ясности глобальные пользователи могут просто иметь нулевой идентификатор арендатора, но мы, скорее всего, также добавим global
boolean.
Есть ли способ написать ограничения для этой логики? Вы не можете просто сделать электронные письма глобально однозначно ограниченными, потому что они не смогут быть повторены между арендаторами, и если вы индексируете нулевой идентификатор арендатора, postgres разрешит незаслуженному пользователю, если есть арендаторы с одним и тем же e -mail.
Я рассмотрел ограничения и проверки исключений, но не смог понять, как их объединить (однозначно ограничить электронную почту глобально, если tenant_id имеет значение NULL, и проверить записи с нулевым идентификатором арендатора и сопоставление электронной почты при вставке любая запись).
Пожалуйста, не спрашивайте, почему я делаю вещи так - мой стол не на самом деле пользователи и мы рассматривали и освобождаемые другие архитектуры :)
Спасибо заранее!
Почему не уникальный индекс (адрес электронной почты, арендатор)? – McNets
Как я уже сказал, «их электронные письма однозначно индексируются их арендаторам» - у нас есть первая часть, это легко. вопрос касается второй части. – tekunokurato