2016-04-13 14 views
-1

これは初めてのスタックオーバーフローでの投稿です。私は次のような状況をモデリングするのに苦労しています。助けを求めていた。ここでデータベーステーブルの設計(ユーザー、受信者、アドレス)

は、ビジネスルールです:

  • ユーザーは、受信者との多くの関係に0..1を持っています
  • ユーザーが0..1を持っている(例えば、ユーザは、ゼロまたは多数の受信者を持つことができます)住所と多くの関係に:
  • 受信者がアドレスと1対1の関係を持っている(例えば、ユーザは、ゼロまたは多くのアドレスを持つことができます)(例:受信者がアドレスを持っている必要があります)これは私が持っているものである

遠い:

  • ユーザー(ユーザーID PK)
  • 受信者(RecipientID PK、ユーザーID NOT NULL FK、あるAddressId NOT NULL FK)
  • アドレス(あるAddressId PK、ユーザーID NULL FK)

本当に気になります私は、アドレステーブルのUserIDはnull可能でなければならないと私はそれを回避方法が表示されません。

ありがとうございました。

+1

メハニーがコメントに書いたように、ユーザーと住所の間に関係テーブルを追加することができます。 rIDはヌル可能である可能性があり、アドレステーブル上にリレーションを持たないはずです。関係を保持するピボット・テーブルを使用できます。 Ex。 UserAddressTable:ID、AddressID、UserID – mehany

答えて

0

これは、あなたがメインのエンティティとして「ユーザー」とデザインを構築しているため、ある が、ここでのシナリオはメインのエンティティに「住所」が必要なので、

Address (Aid PK) 
Recipient (Rid PK, Aid not null FK) 
User (Uid PK, Rid FK, Aid FK) 

または

User (Uid, Rid, Aid) composite PK 
+0

これは、アドレステーブルからユーザテーブルへのヌル可能な外部キーの問題を移動するだけです。 –

0
UserAddresses 
(
    AddressId, -- FK to Address, UNIQUE. 
    UserId -- FK to User 
) 
+0

私は同じ考えをしていましたが、UserとAddressを多対多の関係にすることはできません...それは大丈夫ですか?どうも。 – easypay

+0

私はUserIDを一意にすることはユーザーに0..1のAddressとの多くの関係を持たせないと思います。申し訳ありませんが、私はこのことについてよく知らないです。 – easypay

+0

正しいですが、AddressIdは一意である必要があります。申し訳ありませんが、私の間違いです。 –

関連する問題