2010-12-04 9 views
0

私は複数のフィールドを持っていますが、それらはどのように格納するのか分かりません。もし3NFなら、多くのテーブルがあります。例:国籍。複数の値を持つプロファイルの詳細を保存する方法は?

個人は、単一または二重の国籍を持つことができます。デュアルなら、それは1対多数です。だから、私はユーザーテーブルとuser_nationalityテーブルを作成します。 (すでに国籍のルックアップテーブルがあります)。あるいは私は両方の国籍を "アメリカ人、ドイツ人"のような同じ列に入れて、実行時にそれをシリアル化することができます。しかし、私はこれを検索することができますか?ドイツ人だけを捜すのが好きなのですか?

これは一例であり、Iは多値である30以上のフィールドを持っているので、私はこの61個のテーブルを作成することはできませんと仮定しますか? 1つのユーザーテーブル、複数の値を持つアイテムのルックアップを保持する30のルックアップテーブル、および複数の値を持つアイテムのuser_値を保持する30のテーブル

また、複数の値を持つフィールドは、「私が勉強した大学」のようにまとめてグループ化されていますが、大学名、度数タイプ、タイムラインなどのフィールドグループがあります。 1からこれらの多くにだから、私はこれらのフィールドと同様のuser_educationのための別のテーブルを作成することができますが、これらのフィールドの1つは、私は訪問した大学のキャンパスのような複数の値を固定リストであると仮定することができます私たちはFKテーブルパフォーマンスのために可能な限り少ないテーブルに多くのデータを格納することが目標であるため、ソーシャルネットワークのための良い設計ではありません。

答えて

0

単純な解決策は、SQLテーブルの使用をやめることです。これは、NoSQLが代理するものです。 CouchDBまたはMongoをチェックしてください。そこでは、各値を完全な構造体として格納することができます。そのため、この全体的な問題を単一の(実際にはない)表に減らすことができます。

ほとんどすべてのSQLベースのソリューションの欠点は、それが遅くなるということです。単一のユーザーをフェッチするときに時間がかかる - 大規模なJOINステートメントは、検索時に迅速にまたは遅く実行されません(これらの値を直列化として保管することに決めた場合)。

+0

nosqlソリューションは新しい領域であり、構文などを学ばなければならないため、エラーや時間遅延の可能性が高くなります。はい、それは計画ですが、今はすぐに立ち上げたいと思います。 – Brian04

0

あなたはSQLを使用して維持する必要がある場合は、これらのテーブルを作成する必要があります。どのくらい遠くに行きたいかを決める必要があり、システムに制限を課すことがあります(たとえば、1つのキャンパスだけを指定できるなど)。あなたは2人のだけの国籍(最悪のシナリオ)を必要とするかどう

限り国籍が行くように、あなたはこれを考慮して二国籍フィールド(国籍とNationality2を)検討することができます。もちろん、これは、最大値が異なるフィールドにのみ適用されます。

0

ユーザー表は、関連する属性の多くを持っている場合には、一つの可能​​性は1つが(user_idは、ATTRIBUTE_NAME、ATTRIBUTE_VALUE)のような行を持つテーブルを属性作成することです。すべての属性を1つのテーブルに格納することができます。このテーブルを使用して、特定のユーザーの属性を取得し、属性名と値で検索することもできます。

+0

これをモデル化して動作するかどうかを確認する必要があります。 – Brian04

0

これは一例であり、Iは多値である 30以上のフィールドを持っているので、私はこれを61の テーブルを作成できませんと仮定 ?

あなたは61テーブルの最大数であるが、現実には、それはおそらくあなた自身の例を取る、少ないだろうということだね:

「私が研究している大学」あなたはおそらく唯一の「コラージュ」テーブルを持っていますので、このレイアウトではなく、5に4つのテーブルが存在することになる。この場合、

「私が訪問した大学キャンパス」。私は、データはあなたがモデリングしている設定されている場合、テーブルの多くを使用してのを恐れてはいけないと言うだろう

が大きい - ちょうどあなたが迷子にしないように、あなたは最新のERDまでを保つことを確認してください!また、 "リンクテーブル"のパラダイムにあまり巻き込まれないでください。 - "リンクテーブル"は "エンティティ"になります。たとえば、 "私が学んだ大学"のリンクテーブルを代わりに "コラージュ登録"テーブルを作成し、それにそれ自身のプライマリキーを与え、(リンクされた) "コラージュ登録支払い"テーブルの行としてコース料金を払う時間をそれぞれ保存します。

+0

リンクテーブルとはルックアップテーブルのことですか? – Brian04

+0

いいえ、2つの外部キーを持つ表、つまり「コラージュ登録」は「人」から「コラージュ」にリンクしています。 – Robin

関連する問題