2016-08-01 2 views
1

У меня есть таблицы roles и users. id от roles является внешним ключом столбца role в таблице users.
Есть 2 ролей: support и менеджер. Как я могу указать, что пользователю peter назначена обе из двух ролей?Как назначить 2 внешних ключа одной строке?

роли

| id | role | 
|----|---------| 
| 1 | support | 
| 2 | manager | 

пользователей

| id | user  | pass | role (FK) | 
|----|----------|-------|-----------| 
| 1 | peter | hash1 | 1,2  | <-- 2 foreign keys 
| 2 | jennifer | hash2 | 2   | 
+0

вы всегда можете пойти по этому маршруту .. https://www.mssqltips.com/sqlservertip/1218/sql-server-bitwise-operators-store-multiple- value-in-one-column/ – JamieD77

ответ

7

Это классический отношения многие ко многим. Один пользователь может иметь много ролей, и одна роль может быть назначена для многих пользователей. Вы должны, вероятно, необходимо создать новую таблицу UserRole с информацией, как это:

id userId roleId 
1 1  1 
2 1  2 
3 2  2 
4 ... 

Если вы не хотите, суррогатные ключи, удалить идентификатор и сделать USERID + Идентификатор роли первичного ключа:

userId roleId 
    1  1 
    1  2 
    2  2 
+1

Первый столбец ('id') является избыточным. Кроме того, 'userId + roleId' должен быть' PK'. –

+1

@AlexKudryashev 'id' является всего лишь суррогатным ключом. Некоторым людям это нравится. В моем примере 'id' будет' PK' и 'userId + roleId UK'. – vercelli

1

I добавит третью таблицу - user_roles - со столбцами role_id и user_id

+1

vercelli попал туда первым ... –