2016-07-05 10 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, 
); 

保持するテーブルを作成するための最良の方法だろう何:2人のユーザー間

  1. 接続を。
  2. 1ユーザーと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に1列、USer_IDとSupervisor/Parent/Manager/whatever_idの2つの列が必要です。 もう1つの可能性は、別の列(「parent_id」、「Supervisor_id」など)でユーザー表を拡張することです。しかし、それからあなたはまだウィルオーガ接続のための別のテーブルが必要です。

関連する問題