Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Расположение ключевых полей.  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
Есть таблица с пользователями.
Например вот такая
dbo.users (
user_id int identity not null,
firstname varchar(20),
lastname varchar(20),
....)

и есть таблица с отделами
как-то так
dbo.department
(dep_id int identity not null,
name varchar(20),
room int,
....)

Вопрос как грамотнее организовать связь этих таблиц, собственно в какую из таблиц должны перекочевать ключевые поля?

alter table dbo.users add dep_id int
или
alter table dbo.department add usder_id int

Т.е. или в таблице с пользователями живет id отдела или соответственно в таблице с отделами "живут" id пользователей.

Есть ли какой то существенный аргумент в пользу первого или второго решения. Или это из разряда - как нравится, так и организовывай.

В рамках корпоративной структуры таблиц помимо departments большое количество.
И получается или "центральная" таблица с пользователями имеет компактный вид:
пользователь с набором полей, типа ФИО, телефон, кабинет... но при этом куча справочников в каждом из которых user_id.

или же наоборот. набор таблиц справочников - отделы, права, роли, задачи.... и таблица с пользователями на которой всё завязано и имеет при этом варианте id_отдел, id_права, id_роль, id_задачи....
20 мар 13, 09:22    [14070649]     Ответить | Цитировать Сообщить модератору
 Re: Расположение ключевых полей.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Nakeshi
alter table dbo.users add dep_id int
или
alter table dbo.department add usder_id int

В одном отделе может быть от нуля до N пользователей, так?
Опишите, как вы собираетесь это реализовать в случае "alter table dbo.users add dep_id int", и как — в случае "alter table dbo.department add usder_id int".
20 мар 13, 09:31    [14070690]     Ответить | Цитировать Сообщить модератору
 Re: Расположение ключевых полей.  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
И как только появятся совместители, все ваши рассуждения превращаются в ничто...
20 мар 13, 09:33    [14070700]     Ответить | Цитировать Сообщить модератору
 Re: Расположение ключевых полей.  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
вариант 1

[rp_User]([Id] [uniqueidentifier] NOT NULL,
[CreateDate] [datetime] NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[MiddleName] [nvarchar](50) NULL,
....
)

[rp_UserDepartment](
[Id] [int] IDENTITY(1,1) NOT NULL,
[rp_UserId] [uniqueidentifier] NOT NULL,
[DepartmentId] [int] NULL,
[SubDepartmentId] [int] NULL
...
)

[Department](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Description] [nvarchar](1000) NULL,
[Head] [uniqueidentifier] NULL
...
)




вариант 2


[rp_User]([Id] [uniqueidentifier] NOT NULL,
[CreateDate] [datetime] NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[MiddleName] [nvarchar](50) NULL,
dep_Id int not null,
role_id int not null,
rule_id int not null,
action_id int not null,
..._id int not null,
..._id int not null,
..._id int not null,
..._id int not null,
..._id int not null,
..._id int not null,
....
)

[Department](
[dep_Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Description] [nvarchar](1000) NULL,
[Head] [uniqueidentifier] NULL
...
)
20 мар 13, 09:40    [14070726]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить