2014-12-05 7 views
0

У меня есть таблица базы данных с столбцами "User","Role" и "Application". Мое требование состоит в том, что у пользователя может быть только одна роль, но он может принадлежать нескольким приложениям. Я хочу добавить это ограничение в виде ограничения, но я не могу его достичь.Добавление ограничения к двум столбцам

Установка уникального ограничения на «пользователь» и «роль» не поможет. Также не помогло бы установить уникальное ограничение для всех трех столбцов.

Может кто-нибудь предложить, как установить ограничение здесь.

Edit1:

Ниже ожидаемый выход:

User Role Application 
U1  R1  A1 
U1  R1  A2 
U2  R2  A3 

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

+0

как много приложений, которые один пользователь может коснуться, я мог бы спросить? –

+0

В настоящее время не более 6, но список может расти. – Lokesh

+0

Разрешено ли создавать триггеры на столе? Или быстро обновляемые материализованные представления? – nop77svk

ответ

0

Затем вам необходимо изменить дизайн стола и нормализовать дальше. Если отношение между USER и ROLE составляет 1-to-1, тогда найдите таблицу поиска для user_role_mapping и создайте другую таблицу для user_application_mapping.

В идеале ваши две таблицы будет выглядеть следующим образом:

Create table user_role_map 
    (
    user <datatype>, 
    role <datatype> 
    constraint user_pk primary key (user, role) 
    ); 

Create table user_application_map 
    (
    user   <datatype> NOT NULL, 
    applications <datatype> NOT NULL 
    ); 
+0

Согласен, но этот вариант недоступен. – Lokesh

+0

Тогда просто есть уникальное ограничение на пользователя и роль. Просто! –

+0

Это не сработает, поскольку я сказал, что пользователь с той же ролью может принадлежать нескольким приложениям, что означает, что строка пользовательской роли должна повторяться для каждого приложения. – Lokesh

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