2010-11-29 6 views
0

Vorausgesetzt Sie haben eine Q & Eine Datenbank MySQL mit der Modellierung wurden, ich bin mir dessen bewusst zwei Möglichkeiten, um die Modellarchitektur zu nähern:Vorteile der Modelldaten in einer Tabelle im Vergleich mit zwei Tabellen

  1. Erstellen Sie eine einzelne Tabelle für Fragen und Antworten mit einer "typeId"
  2. Erstellen Sie zwei separate Tabellen; eine für Fragen und einen für Antworten

jemand auf die Vor- und Nachteile beider Ansätze erarbeiten können, und warum sollte man einen Ansatz über den anderen verwenden?

Meine eigenen Beobachtungen:

  1. Ansatz 2 mehr normalisiert
  2. Ansatz 2 benötigt zwei „Kommentare“ Tabellen für Q und A ist oder eine einzelne Tabelle mit Verbund PKs; (Q & A ist gleich IDs)
  3. Ansatz 1 kann mit Selbst sehr kompliziert geworden verbindet und so weiter
+0

Gibt es einen denkbaren Fall, in dem Sie eine andere Art von (was auch immer-enthält-enthalten-Fragen und Antworten) in dieser Tabelle speichern würde? "TypeId" lässt es so klingen, als ob Sie dies erweitern möchten, aber ich bin mir nicht sicher, wie. – Ken

Antwort

2

Die spezifische des Entwurfs wirklich von Ihren Anforderungen abhängen würde und was Sie erreichen wollen und wie groß Ihre Datenbank wäre.

1-Tabelle Ansatz: eine Antwort pro Frage (à la FAQ) Sie können hier im Falle einer einzigen Tabelle verwenden, in denen Sie nur bieten/erlauben, in dem Sie nur id,question,answer Felder und Fragen haben würden, sind nicht zu DB hinzugefügt, bis die Antwort gegeben wird, oder die Zeile aktualisieren, wenn die Antwort verfügbar ist.

2-Tabellen Approch: Sobald es mehr als eine Antwort/Kommentar pro Frage geben kann. Ich könnte ein Modell wählen, das ein wenig anders ist als @ Spredzy, da ich einfach alles wie "E-Mails" einschließen würde: message_id, in_reply_to, timestamp, text für Einfachheit. Diese Einfachheit erlaubt es Ihnen nicht, bestimmte Tags zu markieren (Antworten VS-Kommentare, es sei denn, nur eine Antwort und in_reply_to werden Kommentare wie auf SO). Fragen sind solche mit in_reply_to IS NULL.

3/mehr-Tabelle Ansatz: Wenn Sie wirklich Leistung wollen, indem Sie auf der Haupttabelle FIXED-ROW Länge und muß nicht Auszug von Fragen und Antworten angezeigt werden, sondern wollen nur Zahlen kennen. Sie würden den Text, alle Anhänge usw. trennen. Oder nur, weil Sie Self-Joins vermeiden möchten, wie von @orangepips vorgeschlagen: " Endlich, saugen Joins und präsentieren eine hervorragende Möglichkeit, Leistung zu töten.") und haben eine separate Tische für alles.

+0

+1 wenn nur für mich zu zitieren. – orangepips

1

Modell dies als zwei Tabellen. Fragen können mehr als eine Antwort haben. Erstellen Sie separate Kommentartabellen für Fragen und Antworten. Wahrscheinlich stelle ich mir vor, dass die Kommentardaten nicht in einer einzigen DML-Anweisung vermischt sind.

Eine einzelne Tabelle, die durch eine Typspalte unterschieden wird, könnte sinnvoll sein, wenn Sie die Vererbung eines Objektmodells repräsentieren, aber das ist hier nicht der Fall. Darüber hinaus ist die Absicht der Tabelle unklar für jeden, der das Schema überprüft, weil sie die aufgezählten Möglichkeiten für den Typ kennen müssen; könnte eine Nachschlagetabelle sein, die ich vermutete, aber für zwei Möglichkeiten - und nicht mehr - scheint eine Verschwendung.

Endlich, Self Joins saugen und präsentieren eine hervorragende Möglichkeit, Leistung zu töten.

1

ich schaffen würde 2 Tische:

Eine, die Frage, Antwort und Kommentar darstellt. Wenn Sie genau hinschauen, haben sie die gleichen Kerndaten: user_id, text, date, plus ein type_id-Feld und alle anderen Felder, die Sie benötigen.

Die andere Tabelle eine ziemlich einfache Tabelle würde: Typ

type_id type_desc 
xxx-x-xx question 
xxx-x-xx answer 
xxx-x-xx comment 

Dadurch, dass wird Ihr Modell hoch skalierbar sein, schneller ohne Duplizierung von Daten (Normalisierung).

Schließlich technisch zu sprechen, um alle Fragen oder die ganze Antwort einer Frage zu bekommen, ist es nur eine einfache Verbindung.

Hoffe, dass es helfen könnte,

1

Eine Tabelle pro Datentyp. Wenn Fragen und Antworten identisch sind (wie Objekte in OOP), reicht eine Tabelle aus. Wenn nicht, nicht.

Eine einzelne Kommentartabelle mit zusammengesetzten PKs ist richtig, weil die Kommentare immer noch von einem Objekttyp sind: Kommentar. Die Tatsache, dass sie sowohl Q als auch A referenzieren können, beeinflusst dies nicht.