Создать уникальное ограничение на два столбца в двух таблицах

Вот моя модель данных.

модель данных

Мне нужно сделать username столбец в USER таблица как уникальный столбец. Но это должно быть уникальным для компании.

Например, Компания A может иметь имя пользователя как Джеймс, а Компания B также может иметь имя пользователя как Джеймс.

Чтобы достичь этого, мое мнение состоит в том, чтобы сделать unique constraint с username а также company_id,

Как я могу это сделать?

2 ответа

Из модели данных становится ясно, что пользователь может принадлежать нескольким компаниям, а компания может иметь несколько пользователей. Таким образом, добавление company_id в таблицу USER приведет к взрыву таблицы USER с большим количеством избыточных пользовательских данных для каждого экземпляра компании. Объект USER_COMPANY существует специально, чтобы этого избежать.

Не рекомендуется обрабатывать это требование, используя изменения модели данных. Лучший способ выполнить это требование - использовать код приложения или триггеры.

Наименее неэффективным способом достижения этого посредством изменений модели данных будет добавление столбца имени пользователя в таблицу user_company и синхронизацию таблицы user и user_company для столбца user_name во всех DML-файлах в приложении. Это снова потребует много кода приложения.

Поэтому лучшее решение - оставить это приложению, а не нарушать хорошую модель данных.

Надеюсь это поможет.

Вам нужно изменить базу данных, добавив company_id пользователям. затем добавьте в таблицу уникальный индекс (company_id, username).

user
----
user_id     (PK)
company_id  (UNIQUE INDEX)
emplyee_id
email
username    (UNIQUE INDEX)
password

НО я думаю, что вам не нужно отношение "многие ко многим", может быть хорошей идеей изменить базу данных, удалив реакцию "многие ко многим" следующим образом:

company
-------
company_id  (PK)
company_name

user
----
user_id     (PK)
company_id  
emplyee_id
email
username
password
Другие вопросы по тегам