2009-08-31 7 views
0

私はすべてのユーザータイプから派生する既存の個人テーブルを持つデータベースを作成しています。
Individual: FirstName, LastName, Email, <lots more>
従業員:他の言葉では、のようなテーブルがあります
お客様をIndividualId:今、私はから派生していないユーザーの新しいタイプ(WeirdPerson)を追加するなど
テーブル間で「同一性」を共有する


をIndividualId個人。 (WeirdPersonは、どのIndividualよりもそれに関連するデータがかなり少なく、WeirdPersonのためにIndividualのすべてのフィールドをnullにすることは実際には望んでいません)。

テーブルに使用するにはキーフィールドが必要ですWeirdPersonsのエントリと個人のエントリがあります。
MashedupIndividuals: MashedupId, IndividualId
MashedupWeirdPerson: MashedupId, WeirdPersonId

私はMashedupIdが自動生成されたフィールドになりたい:これはそうのようなマップテーブルを示唆しています。私はTSQLを使用しているので、IDは良い選択と思われます。 MashedupIdが2つのテーブルに分割されている点を除いて。
MashedupIds: MashedupId
MashedupIdをIDとして設定し、MashedupIndividualsとMashedupWeirdPersonで外部キーにします。

これを進めるのが最善の方法ですか?これをどうやって解決しますか?

編集:私がWeirdPersonのために持っている唯一の情報は電子メールアドレスです。個人のメールフィールドを引き出し、GlobalPersonIdとEmailだけを使って新しいGlobalPersonテーブルを作成することを考えました。 GlobalPersonテーブル(または私が使用するより良い名前)は、WeirdPersonを全く異なるタイプとして分離するほど自然ではないと感じます。しかし、私はこの立場を再考したい。

+0

私は初めての人や姓の人に会ったことはないと思います。これらの奇妙な人々は正確に何ですか? – jmucchiello

+0

WeirdPersonの不思議な問題に対処するために私の質問を編集しました。私は彼らに詳しい情報を与えることなく逃げることができたと思った。私は明らかに間違っていた。 :) – Eric

答えて

2

私はあなたのアプリケーションのすべての人に共通のデータをホストするテーブルを提案します。次に、特定のタイプの人のために追加のテーブルを作成し、それらを共通のテーブルにリンクすることができます。

tblPerson

  • PERSONID(PK)
  • などの名前、住所、誕生日、

tblEmployee

  • 社員(PK)
  • PERSONID(FKへtblPerson)
  • タイトル、オフィス電話番号、Eメールアドレスなど

tblCustomer

  • 得意先(tblPersonにFK)(PK)
  • PERSONID
  • 他のフィールド...

編集:ここでは

はいくつかの定義されていますあなたの質問にもっと適用できます(そして、これらの奇妙な仲間とのより多くの楽しみプレ)。重要なのは、奇妙な人と普通の人が共有するデータを確立し、そのモデルをサポートするテーブル/関係を確立することです。奇妙な人には当てはまらないフィールドをtblIdividualからtblNormalPersonに移動する必要があるかもしれません。奇妙/普通の人の両方に適用可能なデータのための

tblIndividual

  • IndividualID(PK)
  • 他のフィールド

tblWeirdPerson

  • WeirdPersonID(PK)
  • IndividualID (fkからtblまで) (奇妙な人々に適用)

tblNormalPerson

  • NormalPersonID(PK)(普通の人に適用される他のフィールド)
  • IndividualID(tblIndividualにFK)
  • NumberOfHeads
  • その他...
+0

実際には、dbにはすでにこのような設定が含まれています。問題はWeirdPersonが私の個人テーブルには適していないことです。 – Eric

+1

私が彼のことを意味していると思うのは、WeirdPersonクラスを持っていれば基本的なクラスを持っていないはずです。 WeirdPersonなどから派生したtblPersonと、「普通の」人々から派生したtblDetailPersonを持つことができます。私は、それが何になっているのかと思う。 –

+0

あなたは、これらの人々を奇妙にすることについてより具体的に説明する必要があります。名前や住所はありませんか?または、personテーブルには適用されないフィールドがさらに多くあるという問題がありますか? – jmucchiello

0

あなたは常にnullそのうちの1つは3つのフィールドを持つテーブル持つことができる:

MashedupId、IndividualId、WeirdPersonId

またはIDフィールドとIDのタイプ(個別/奇妙な)

+0

はい、私はそれも考慮しました。一般的には、私はそのようなソリューションのファンではありません。あるタイプの人物を照会することは難しく、すべての行のNULLが私を苛立たせます。 – Eric

+0

あなたはsharedIDとemailだけで(上記の)個人(共有)のテーブルを持つことができます。マッシュアップテーブルにmashedupIDとsharedIDがあるだけです。 – Beth

1

としあなたのIDにuniqueidentifierフィールドを使用できます。これは、複数のテーブルにわたって一意であることが保証されています。新しい値を生成するには、NEWID()関数を使用します。

+0

+1:ちょうどrefination:すべてのテーブルのための単一のSEQUENCEを使用しています。 – ATorras

関連する問題