Создать уникальное ограничение на два столбца в двух таблицах
Вот моя модель данных.
Мне нужно сделать 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