0

次のテーブルを含むデータベース スキーマがあります。

  • 人々
  • 組織
  • 関係の種類

私がデザインしたいのは、関係タイプの概念と、その関係の構造です。そのため、人は別の人や組織とある種の関係を持つことができます。組織は、別の組織または個人と関係を持つことができます。

私は次のスキーマを持っていますが、コミュニティを通過して実行し、より良いアイデアがあるかどうかを確認したいと思います.

CREATE TABLE OrganisationRelationshipTypes
(
    ID INT PRIMARY KEY IDENTITY,
    RelationshipTypeID INT NOT NULL REFERENCES RelationshipTypes(ID)
    FromOrganisationID INT NOT NULL REFERENCES Organisations(ID),
    ToOrganisationID INT NOT NULL REFERENCES Organisations(ID)
)

CREATE TABLE PersonRelationshipTypes
(
    ID INT PRIMARY KEY IDENTITY,
    RelationshipTypeID INT NOT NULL REFERENCES RelationshipTypes(ID),
    FromPersonID INT NOT NULL REFERENCES People(ID),
    ToPersonID INT NOT NULL REFERENCES People(ID)
)

CREATE TABLE OrganisationPersonRelationshipTypes
(
    ID INT PRIMARY KEY IDENTITY,
    RelationshipTypeID INT NOT NULL REFERENCES RelationshipTypes(ID)
    FromOrganisationID INT NOT NULL REFERENCES Organisations(ID),
    ToPersonID INT NOT NULL REFERENCES People(ID)
)

CREATE TABLE PersonOrganisationRelationshipTypes
(
    ID INT PRIMARY KEY IDENTITY,
    RelationshipTypeID INT NOT NULL REFERENCES RelationshipTypes(ID)
    FromPersonID INT NOT NULL REFERENCES People(ID),
    ToOrganisationID INT NOT NULL REFERENCES Organisations(ID)
)

これの考え方は、次のようなシナリオをカバーすることです。

  • 組織は別の組織と取引を行った
  • 人は他人の父親
  • 組織が最近その人を雇った
  • 最近その組織で働いていた人

このスキーマは少し乱雑に見えますが、現時点では代替案が思いつきません。

何か提案はありますか?

4

2 に答える 2

2

Party「契約の当事者」のように、個人または組織の総称としてよく使用されます...

ここに画像の説明を入力

于 2012-08-09T12:02:38.410 に答える
1

良い感じ。

すべての関係テーブルを 1 つにまとめることをお勧めします

CREATE TABLE RelationShips (
    ID INT PRIMARY KEY IDENTITY,
    RelationshipTypeID INT NOT NULL REFERENCES RelationshipTypes(ID),
    FromPersonID INT REFERENCES People(ID),
    ToPersonID INT REFERENCES People(ID),
    FromOrganisationID INT REFERENCES Organisations(ID),
    ToOrganisationID INT REFERENCES Organisations(ID)
)

このようにして、1 回のデータベース ルックアップでリレーションシップを簡単にフィルター処理できます。つまり、「特定の人物とのすべての関係を見つける」。もちろん、NOT NULL制約を取り除く必要があります。

于 2012-08-09T06:39:10.173 に答える