2010-11-30 14 views
0

私は4つのテーブル、裁判所、部門、住所とtelephone_numbersを持っています。SQLの正規化

各裁判所には、1つまたは複数の部門、民事、犯罪、家族などが含まれている可能性があります。これらの組み合わせには、1つ以上の住所がある場合があります。刑事裁判所。同じことが電話番号に適用され、各部門または住所ごとに同じであっても、異なっていてもよい。

私はこれにいくつかのアプローチを検討しましたが、使用するのが最善ではありませんか?

a)大量のデータを何度も複製する1つの大きなテーブルを持つことができます。

b)私は、分割テーブルの裁判所のFKと住所テーブルの部門のFKの保持を検討しました。これは、除算表の各裁判所で除算値を複製することを意味します。私は電話のテーブルとどうしたらよいかわからない。

c)最終的には、FKのすべての4つのテーブルすべてを保持する1つのリンクテーブルを持つことでした。これはデータの複製を意味しませんが、意味のあるものを得るための多くの結合を意味し、おそらく使用するのは難しいでしょう。

ここで明らかになっているのは間違いですが、これらのテーブルをモデル化する最良の方法は何ですか?

テーブルにはCakePHPを介してアクセスしますが、その時点では片方にしておきます。

+0

"noramlisation"には既に多くのSOの質問とインターネットページがあります! –

+0

申し訳ありませんが、私は人々が助けが必要なときにここに来ましたが?私は正規化を読んだので、データを複製しないスキーマを作成しようとしています。たぶん次回に質問する人は、そこにたくさんのページがあることを教えてくれるでしょう! – Dave

答えて

0

何を説明することは、スター・スキーマであると私はあなたがあなただけが、あなたがそれを必要とするようにしてデータを取得するために行う必要がある照会何を見るべきだと思うそれを

court 1:m divisions 
divisions 1:m addresses 
address 1:m telephone 

を行うにはお勧めの方法ですdescription not sqlが最初のステップになります

+0

思考のおかげで、私はその裁判所のように思う1:m部門、部門1:mアドレス、部門1:m電話。私は星のスキーマを見て、ファクトテーブルと複数のディメンションテーブルを使用することは、上記の私のオプションcによく似ています。私が次に必要とするのは、主記録が裁判所、その部門、住所、電話番号を参照する必要があるため、ファクトテーブルのレコードをメインレコードにリンクすることです。このようにファクトテーブルを使用する例は見ていないので、この方法はありますか? – Dave

1

4つのテーブルのすべての組み合わせを数えた行が10,000未満の場合は、フラットな単一テーブル構造を提案します。行サイズが約8Kの場合、データサイズは約80メガになります。ほとんどの無料または低コストのデータベースは、メモリ内にそれほど多くのデータを保持し、I/Oコストをほぼゼロにします。

複数のテーブルが必要な場合は、デザインを柔軟に拡張できるデザインが必要です。表示される表にアプリケーション固有の列を追加します。 alt text

TypeListテーブルには、州、連邦、地方などの裁判所のタイプを保持することができ、エントリにはTL_Tableの "Court"値を入力します。部門のリストは、TL_Typeの "Division"と共にここに格納されます。 TL_Typeを使用すると、データ入力のためのドロップダウンリストに入力できます。

誰かが悲鳴を上げる否定的なコメントを持っていると確信していますが、うまくいけば、彼らは宇宙でただ笑っているだけです。

+0

スキームをありがとう、私はあなたがやったことに感謝します。私はTypelList機能が好きです。だから私がこのレイアウトを使用するならば、私は裁判所、部署、電話番号の住所をケースファイルにリンクすることをやめましたが、どのキーが必要でしょうか? – Dave

+0

私は、多くの裁判所や多くの異なる部門に存在しないケースがあるので、実際には裁判所、部門、住所、電話のそれぞれに1対1であることを心配しています。 1つのケースに入ると、1つのテーブルにcaseidがあり、4つの外部キーが裁判所の分割アドレスと電話番号になります。 「ケース」テーブルは、「1つの大きなテーブル」または上記のダイアグラムのいずれかと同じになります。 –