2016-07-05 2 views
-1

У меня есть следующие SQL таблицы:Определение связей между таблицами

create table dbo.Users (
    Id int identity not null primary key clustered (Id), 
    Name nvarchar (120) null, 
); 

create table dbo.Organizations (
    Id int identity not null primary key clustered (Id), 
    Name nvarchar (120) null, 
); 

Что бы лучший способ для создания таблиц, которые держат:

  1. соединений между 2 пользователей;
  2. Соединения между 1 пользователем и 1 организацией.

Следует ли это делать только с одной таблицей?

+0

Какова природа соединений? Связаны ли 2 связанных пользователя с родителями/дочерними или родственными братьями (равными)? Я предполагаю, что каждая организация может быть связана с 0 или более пользователями? –

+0

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

+0

Итак, это много-много отношений в обоих случаях? –

ответ

1

Для отношений многих и многих людей вы должны добавить таблицу пересечений. Поскольку у вас есть 2 подключения, вам нужны 2 стола:

CREATE TABLE dbo.FavoritUsers (
    FU_UserId int FOREIGN KEY References dbo.Users(Id), 
    FU_FavofitUserId FOREIGN KEY References dbo.Users(Id), 
    PRIMARY KEY (FU_UserId , FU_FavofitUserId) 
) 

CREATE TABLE dbo.FavoritOrganizations (
    FO_UserId int FOREIGN KEY References dbo.Users(Id), 
    FO_FavofitOrganizationId FOREIGN KEY References dbo.Organizations(Id) 
    PRIMARY KEY (FO_UserId , FO_FavofitOrganizationId) 
) 
0

Я бы предложил другой стол - например, OrganizationTree. Это должно иметь один столбец для Orga.ID и два столбца USer_ID и Supervisor/Parent/Manager/whatever_id, чтобы удерживать соединение между двумя людьми. Другой возможностью было бы расширить таблицу пользователя другим столбцом (например, «parent_id», «Supervisor_id» или что-то еще). Но тогда вы все еще нуждаетесь в другом столе для Orga Connection.

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