2010-11-24 5 views
1

Ich habe eine Website mit Benutzern, die ich möchte, dass Benutzer ihre Ethnien identifizieren können. Was ist der beste Weg dies zu modellieren, wenn es nur eine Hierarchieebene gibt?Datenmodellierung: Ethnien mit Eltern-Kind-Beziehung?

Lösung 1 (Einzel Tabelle):

Ethnicity 
- Id 
- Parent Id 
- Name 

Lösung 2 (zwei Tabellen):

Ethnicity Group 
- Id 
- Name 

Ethnicity 
- Id 
- Ethnicity Group Id 
- Name 

ich diese verwenden werden, so dass Benutzer für andere Benutzer aufgrund von ethnischer Herkunft suchen. Welcher der beiden Ansätze wird für mich besser funktionieren? Gibt es einen anderen Ansatz, den ich nicht berücksichtigt habe? Ich benutze MySQL.

+1

Wenn es nur eine Hierarchieebene gibt, wie kann es EthnicGroup geben? –

Antwort

1

Nun, es gibt so etwas wie eine Ethnicity-Gruppe in der realen Welt, also brauchen Sie zwei Tabellen, nicht eine. Die reale Welt hat drei Ebenen (die oberste wäre Race), aber ich verstehe, dass dies hier nicht notwendig ist. Wenn Sie die drei Ebenen in zwei zerquetschen, müssen Sie vorsichtig sein und sie alle am Anfang richtig auslegen. Sie werden jedoch anfällig dafür sein, dass die Leute sagen, dass sie das Richtige wollen, und Sie müssen es vielleicht ändern oder die Struktur ändern, um mehr in ... viel mehr Arbeit später zu passen.

Wenn Sie es richtig machen, wie in der realen Welt, ist dieses Problem beseitigt. Lassen Sie mich wissen, wenn Sie Race wollen, und ich werde das Modell ändern.

Die Tabellen sind viel zu klein, und die Schlüssel sind zu bedeutungsvoll, um ihnen Id-iot-Spalten hinzuzufügen; belasse sie als reine relationale Schlüssel, sonst verlierst du die Macht der relationalen Engine. Wenn Sie wirklich enge Schlüssel verwenden möchten, verwenden Sie einen CHAR (2) EthnicityCode anstelle einer NUMERIC (10,0) oder einer bedeutungslosen Zahl.

Link to Ethnicity Data Model (plus die Antwort auf Ihre andere Frage)

Link to IDEF1X Notation für diejenigen, die mit dem relationalen Modellierungsstandard nicht vertraut sind.

+0

@SONewbie. Vielen Dank. Sie haben nicht geantwortet, ob Sie Rennen (3 Level) oder 2 Levels wollen. – PerformanceDBA

+0

Ich denke immer noch über Dinge nach. Vielleicht reicht das für meine Bedürfnisse aus: "Asiatisch, Japanisch", "Asiatisch, Koreanisch" usw. Vielleicht brauche ich dieses Hierarchiekonzept nicht wirklich. Noch nicht sicher. Immer noch darüber nachdenken, wie die Daten verwendet werden. Wenn ich Hierarchie brauche, denke ich, ich brauche nur 2. – StackOverflowNewbie

+0

@SONewbie. Datenmodell aktualisiert – PerformanceDBA

0

Wenn es in der realen Welt nichts wie eine "ethnische Gruppe" gibt, würde ich vorschlagen, dass Sie keine in Ihrem Datenmodell einführen.

Alle Fragen, die Sie mit dem zweiten tun können Sie auch mit dem ersten tun, weil Sie einfach FROM ethnicity AS e1 JOIN ethnicity AS es ON (e2.ethnicity_id = e1.parent_id) auswählen können.

+0

"Asian" ist eine Gruppe, "Japanisch" ist die tatsächliche Ethnizität ??? – StackOverflowNewbie

+1

Ich hörte nie jemanden sagen "Menschen der asiatischen Ethnie", aber in diesem Fall, gehen Sie voran und erstellen Sie Ihre Tabelle "Ethnische Gruppe". Ihre Datenbankstruktur sollte die Realität modellieren. – AndreKR

0

Ich möchte nicht peinlich sein, aber was machen Sie mit Menschen gemischter Herkunft? Ich denke, dass das Beste, auf das Sie hoffen können, eine einfache einstufige Aufzählung ist, wie Sie sie bei Volkszählungsformularen erhalten (z. B. "Schwarz", "Weiß", "Asiatisch", "Hispanic" usw.). Es ist nicht ideal, aber es erlaubt den Leuten, sich ziemlich leicht selbst zu identifizieren. Konzepte wie Rasse und ethnische Zugehörigkeit sind wollüstig genug, ohne zu versuchen, zusätzliche (weitgehend bedeutungslose) Hierarchien auf ihnen zu erzeugen, also ist es mein Bauchgefühl, es einfach zu halten.

+0

Benutzer können 0 oder mehr Ethnien auswählen. – StackOverflowNewbie