2010-11-24 17 views
1

私は、ユーザーが自分の民族性を識別できるようにしたいというサイトを持っています。階層のレベルが1つしかない場合、これをモデル化する最良の方法は何ですか?データモデリング:親子関係を持つ民族?

溶液1(シングルテーブル):

Ethnicity 
- Id 
- Parent Id 
- Name 

溶液2(二つのテーブル):ユーザは、民族性に基づいて他のユーザを検索できるように、私はこれを使用する

Ethnicity Group 
- Id 
- Name 

Ethnicity 
- Id 
- Ethnicity Group Id 
- Name 

。どちらのアプローチが私にとってうまくいくのでしょうか?私が考えていない別のアプローチがありますか?私はMySQLを使用しています。

+1

階層レベルが1つしかない場合、どのようにEthnicityGroupが存在しますか? –

答えて

1

実際にはエスニシティグループのようなものがあるので、2つのテーブルが必要です。実世界には3つのレベルがあります(一番上のものはレースです)が、ここでは必要ないかもしれないと私は理解しています。あなたが2つに3つのレベルをスカッシュする場合は、慎重に、最初に適切にそれらをすべてレイアウトする必要があります。しかし、彼らは本当のことがほしいと言っている人々にとって脆弱で、あなたはそれを変更しなければならないかもしれません。

これを正しく行うと、実際の世界で問題が解決されます。あなたがレースをしたいのなら教えてください。モデルを変更します。

Id-iotカラムを追加するには、テーブルが非常に小さく、キーが意味があります。それらを純粋なリレーショナル・キーのままにします。そうしないと、リレーショナル・エンジンの能力が失われます。狭いキーが本当に必要な場合は、数値(10,0)または意味のない数値ではなく、CHAR(2)EthnicityCodeを使用します。リレーショナルモデル標準に慣れていない人のための

Link to Ethnicity Data Model(プラスあなたの他の質問への答え)

Link to IDEF1X Notation

+0

ありがとう。あなたはレース(3レベル)か2レベルを望むかどうかには答えていません。 – PerformanceDBA

+0

私はまだ物事を考えています。おそらくこれは私のニーズに十分に十分です。「アジア系、日本系」、「アジア系、韓国系」などです。おそらく、私はこの階層の概念を本当に必要としません。まだ分​​からない。それでもデータがどのように使われるか考えています。私が階層が必要な場合、私は2だけ必要と思うと思う。 – StackOverflowNewbie

+0

@SONewbie。データモデルが更新されました。 – PerformanceDBA

0

現実世界に「民族グループ」のようなものがない場合は、データモデルに導入しないことをお勧めします。

FROM ethnicity AS e1 JOIN ethnicity AS es ON (e2.ethnicity_id = e1.parent_id)を選択するだけで、2番目のクエリで実行できるすべてのクエリを最初のクエリで実行できます。

+0

"Asian"はグループ、 "Japanese"は実際の民族性??? – StackOverflowNewbie

+1

「アジア系民族グループの人々」と言われたことはありませんでしたが、その場合は、「民族グループ」テーブルを作成してください。あなたのデータベース構造は現実をモデル化すべきです。 @SONewbie。 – AndreKR

0

私は厄介ではありませんが、混合降下の人々とは何をするつもりですか?あなたが望むことができる最高のものは、国勢調査のフォーム(例えば、「黒」、「白」、「アジア」、「ヒスパニック」など)のような単純な単一レベルの列挙です。それは理想的ではありませんが、人々はかなり容易に自己を識別することができます。人種や民族性のような概念は、それらの上に追加の(ほとんど無意味な)階層を作成しようとせずに十分に柔らかいので、私の直感はそれを簡単に保つことです。

+0

ユーザーは0人以上の民族を選択できます。 – StackOverflowNewbie

関連する問題