DBの設計:1テーブル内の別々のまたはすべてのメンバー表?
-
23-08-2019 - |
質問
私は、個人情報と友達のテーブルを作成し、細部にログオンします。
より良いどのような2つのテーブルにメンバー表を分離するために、 一つは、最小限の詳細が含まれてい その他の詳細と二ます。
または1つのテーブルに残っていますか?
私はメンバーの外部キーを含むテーブルの多くを持っています。
解決
これは、これらの「その他」の内容が何であるかに大きく依存します。これは一般的で興味深い質問で、一見何の「ハードと高速」答えはありません。私たちは、あなたが表現したい任意の特定のものの属性(「詳細」)の間の実際の関係について、より抽象的問題を考える場合でも、我々はいくつかの明快さを見つけることができます。
は、あなたの質問では、友人が「最小」と「その他」の詳細を持っていると述べています。むしろ「最小」または「その他」として、これらの詳細を分類するよりも、のは、個々の(「アトミック」)の詳細は、完全に友人がユニークなものは何でもすることによって決定することができるかどうかによってそれらを分類してみましょう。
私はFriendIDまたは電子メールアドレスか何かのようないくつかのプライマリキー(PK)は、そこにあると推定します。この一意の識別子を考慮すると、自分自身に問う:「私は正確に一つのFriendID(または電子メールまたはあなたがPKとして使用しているものは何でも)与えられていた場合、私は絶対に確信しているものをその友人の細部例えば、FriendID = 2112与えられ、私は絶対に?その友人の姓、名、および生年月日を知っているが、私はないは、それらの複数がありますので、絶対にその友人の電話番号を知っています。
一つのテーブルで一緒にグループあなたは明確にPK与え知っているすべての詳細。 PKに戻って「親」テーブルへの外部キー付き、「子」の表に(電話番号の場合、「自宅」や「仕事」のように)あなたがより多くのデータを必要とする対象の詳細を置きます。 (注:子テーブルのPKが複合されることを非常に可能性があります。つまり、親テーブルのPKと()この例では、「自宅」や「仕事」のような差別化要因で構成される多くの方のための複合キーを。 1-Mの関係は非常に良好である。)
データベースのオタクは、のの機能の依存関係に基づいて、この分解を呼び出します。
他のヒント
一つのテーブルの の場合を除き、あなたは潜在的に細部の複数のセット(すなわち、複数の電子メールアドレス、ユーザー・グループ、日-電話、夜、電話、携帯電話など)への一つのメンバーを関連付ける必要がありますます。
は疑いありません:それは論理的に理にかなっているときは、常にテーブルを分割
。例: 友達1:トム・ジョーンズはバレーに住んでいます 友人2:エリン・ジョーンズはそのあまりにも住んでいる、それは彼の弟だから。
テーブルます:
Friends Id Name Address 1 Tom Jones 1 2 Erin Jones 1 Adresses Id Address 1 The valley
それ以外のものは、いつものように出てきます
Friends Id Name Address 1 Tom Jones The Valey 2 Erin Jones The Valley
どの誤ったクエリにつながるます。
それはちょうど1つの問題だ、数多くあります。好きなものをその2電子メールアドレスと3つの携帯電話の番号を持っている場合はどうなりますか? streetnameの変更及び5人の友人はそれに住んでいる場合はどうすれば?
あなたはあなただけの1台を使用することができますよりも、あなたのテーブルが小さくなり、そしてあなたがそれを照会する必要はありません非常に確信している場合。しかし、あなたはあまりにもSWのようないくつかのエクセル、またはそのことについては一枚の紙を使用することができますより: - )
しかし、あなたはデータベースを持っているしたい場合は、1として扱います。
全体の問題のために正規の記事を読むます。