2016-05-08 4 views
0

Вот моя модель данных.Создайте уникальное ограничение на два столбца в двух таблицах

data-model

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

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

Для этого я хочу сделать unique constraint с username и company_id.

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

ответ

1

Необходимо изменить вашу базу данных, добавив 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 
+0

Спасибо Данило. Будет ли это изменение влиять на нормализацию базы данных? – Bishan

+0

Я думаю, что это изменение до нормализации, я предлагаю изменить модель отношения сущности, добавляя ограничение: пользователь может работать только в одной компании. –

1

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

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

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

Таким образом, лучшим решением является оставить его в приложении и не нарушить хорошую модель данных.

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

Смежные вопросы