suresh shewale Ответов: 1

Как создать пользовательскую таблицу, которая ссылается на несколько типов пользователей главной таблицы


Я хочу создать пользовательскую/ролевую систему:

У пользователей есть имя и пароль.Таблица ролей с разными ролями, но это разные роли, которые ссылаются на разные мастер-таблицы .
Предположим, что роль 1 Супервизор-ссылающийся Супервизор мастер-таблица
Роль 2 Центр-Главная таблица ссылающегося Центра
Роль 3 Учетная Запись _Referring Главная Таблица Учетной Записи
Теперь я хочу объединить все эти таблицы с пользователями без использования case в предложении where ..
Как этого добиться, чтобы избежать жесткого кода?....

Что я уже пробовал:

Пользователи:
CREATE TABLE [dbo].[Users]
(
    [id] [int] NOT NULL,
    [name] [nvarchar](50) NULL,
    [password] [nvarchar](50) NULL    
)

Роли:
CREATE TABLE [dbo].[Roles]
(
    [id] [int] NOT NULL,
    [name] [nvarchar](50) NULL 
)
роль пользователя:
CREATE TABLE [dbo].[User_Roles]
(
    [id] [int] NOT NULL,
    [User_id] [int] NOT NULL,
    [Role_id] [int] NOT NULL     
)
CREATE TABLE [dbo].[tbl_supervisor]
(
    [Sid] [int] NOT NULL,
    Supervisor varchar(200)
)
CREATE TABLE [dbo].[Center ]
(
    [Cid] [int] NOT NULL,
    Center varchar(200)
)
CREATE TABLE [dbo].[Account ]
(
    [Aid] [int] NOT NULL,
    Account varchar(200)
)

1 Ответов

Рейтинг:
10

CHill60

Ваш дизайн будет работать так, как он есть. Ключ в том, как соединить таблицы. Используйте левые внешние соединения для всех таблиц и найдите первое ненулевое имя для любого из них. например.

SELECT U.[name], U.[password], COALESCE(S.Supervisor, C.Center, A.Account)
FROM Users U
INNER JOIN [User_Roles] UR on UR.[User_id] = U.id
INNER JOIN [Roles] R on R.id = UR.Role_id
LEFT OUTER JOIN [tbl_supervisor] S ON UR.Role_id = S.Sid
LEFT OUTER JOIN [Center ] C ON UR.Role_id = C.Cid
LEFT OUTER JOIN [Account ] A ON UR.Role_id = A.Aid
Обратите внимание, однако, что вы не должны хранить пароли непосредственно в своей базе данных. Здесь есть несколько статей о CodeProject, которые помогут вам сделать это правильно.

Другие моменты - наличие пробелов в именах таблиц-это плохой дизайн …[Center ] должно быть [Center] и [Account ] должно быть [Account].
Также нет необходимости предварять имена таблиц словами tbl_ - это субъективная точка зрения, но в наши дни большинство разработчиков избегают ее. Это говорит о том, что код написали два разных человека, поэтому в ситуации с домашним заданием он выглядит так, как будто вы скопировали работу.