2015-02-10 3 views
0

У меня есть таблица пользователей:связи между пользователями с сообщениями

create table dbo.User 
(
    Id int identity not null, 
    Name nvarchar (400) null, 
    // Other coluns as Login, Password, etc. 
) 

create table dbo.Role 
(
    Id int identity not null, 
    Name nvarchar (20) null 
) 

create table dbo.UserRole 
(
    UserId int not null, 
    RoleId int not null 
) 

Каждый пользователь имеет одну или несколько ролей.

Мне нужно связать пользователей друг с другом в периоды типа.

Например, один профессор своих студентов в течение 4-х месяцев в 2015 году

И я также необходимо отслеживать сообщения между пользователями.

Одна из моих идей было бы следующее:

create table dbo.UserToUser 
(
    FirstUserId int not null, 
    SecondUserId int not null, 
    StartDate datetime not null, 
    EndDate datetime not null 
) 

Будучи как FirstUserId и SecondUserId FK-х из таблицы Users.

create table dbo.Message 
(
    ToId int not null, 
    FromId int not null, 
    Text nvarchar(max) not null, 
    Created datetime not null 
) 

Быть как таблицей ToId, так и FromId FK's Users.

Должно ли это быть сделано по-другому?

+2

Они, кажется, хорошо, за исключением я бы ожидать UserToUser иметь категорию «тип отношения», чтобы указать, почему существует связь. – Hogan

+0

Это имеет смысл ... Спасибо –

+0

Выглядит неплохо. В UserToUser EndDate, вероятно, должен иметь значение NULL (мы не знаем, когда отношения закончатся наверняка). Вы можете захотеть поставить дату начала и окончания на userrole, чтобы позволить ролям меняться со временем. то есть ученик может преподавать класс, а затем вернуться к тому, чтобы быть просто учеником. – LeeG

ответ

0

Это кажется прекрасным, но вы можете быть более общим с отношениями. Например, вы можете иметь более двух человек в отношениях. Есть несколько способов сделать это, но я хотел бы сделать это следующим образом:

Relationship 
------------ 
ID 
StartDate 
EndDate 
Category 
... etc 

RelationshipMembers 
------------------- 
RelationshipID 
UserID 
Order (may not be needed) 
MembershipCategory (eg Professors and Students // messageFrom and messageTo) 
+0

В таком случае не будут ли даты начала и окончания в MembersMembers? –

+0

@MiguelMoura - это может быть и то, и другое. В отношениях начало и конец определяли бы временной интервал отношения (например, даты семестра). В членах он определял бы временной интервал для этого члена, являющегося частью отношений (даты обучения приглашенного профессора или даты участия учащегося) – Hogan

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