Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Brauchen Sie einen Tipp zum einfachen MySQL-DB-Design

Warum haben Sie ein attribute Tabelle ?

Attribute sind Spalten, keine Tabellen.

Der Website-Link sagt uns nichts.

Die ganze Idee einer Datenbank besteht darin, dass Sie die vielen kleinen Tabellen nach Bedarf für jede Abfrage zusammenfügen, also müssen Sie sich daran gewöhnen. Sicher, es gibt Ihnen ein Raster, aber ein kurzes und süßes, ohne Nullen. Was Sie versuchen, ist Tische zu vermeiden; Verwenden Sie nur ein riesiges Gitter, das voller Nullen ist.

(schnipsen)

Stellen Sie Ihren Attributnamen (Spaltennamen) nicht den Tabellennamen voran, das ist redundant. Dies wird Ihnen klar, wenn Sie anfangen, SQL zu schreiben, das mehr als eine Tabelle verwendet:dann können Sie den Tabellennamen oder einen Alias ​​verwenden, um mehrdeutigen Spaltennamen voranzustellen.

Die Ausnahme ist der PK, der vollständig gerendert und in dieser Form überall dort verwendet wird, wo es sich um einen FK handelt.

Durchsuchen Sie die Website und lesen Sie einige SQL-Fragen.

Danach können Sie später darüber nachdenken, ob Siestrength wollen und defense Attribute (Spalten) vom type sein; oder nicht. Und so weiter.

Antworten auf Kommentare vom 30. November 10

.
Ausgezeichnet, Sie verstehen Ihre Daten. Recht. Jetzt verstehe ich, warum Sie eine Attributtabelle hatten.

  1. Bitte stellen Sie sicher, dass diese 10 Beispiele repräsentativ sind, ich sehe sie mir genau an.

    • Typ:Gem Name:Emberspark Pendant ... Oder ist NeckMiscellaneous ein Typ ?
    • Ist Unique ein echter ItemType? Ich denke nicht
    • Action.Display "Bitte zurück zu einem Saisonorganisator"
    • Wo sind die Attribute für AttackPower und HitRating ?
      .
  2. Wie viele verschiedene Arten von Artikeln (von 35.000) gibt es, ala mein Produkt-Cluster-Beispiel. Eine andere Art, diese Frage zu formulieren, ist, wie viele Variationen es gibt. Ich meine, sinnvollerweise, nicht 3500 Items ÷ 8 Attribute ?

  3. Ändern sich die item_attributes ohne eine Veröffentlichung von S/W (z. B. eine neue Inner Strength Attribut) ?

  4. Welche Attribute wiederholen sich pro Artikel (mehr als eines); bisher sehe ich nur Aktion ?

  5. Es ist ein Spiel, also brauchen Sie eine DB, die eng und sehr schnell ist, vielleicht vollständig speicherresident, richtig. Keine Nullen. Kein VAR irgendwas. Kürzeste Datentypen. Duplizieren Sie niemals etwas (wiederholen Sie sich nicht). Sind Sie mit Bits (Booleans) und Vektoren zufrieden?

  6. Müssen Sie diese regulären Ausdrücke einfach in SQL übersetzen, oder sind Sie mit einem ernsthaften Slog für jeden zufrieden (dh sobald Sie sie in SQL zum Laufen gebracht haben, sind sie ziemlich stabil und dann spielen Sie nicht damit herum, es sei denn, Sie finden einen Fehler ) (kein Sarkasmus, ernsthafte Frage) ?

    6.1 Oder vielleicht ist es umgekehrt:die db ist festplattenresident; Sie laden es einmal in den Speicher; Sie führen die Regexes während des Spiels darauf aus. gelegentlich auf die Festplatte schreiben. Daher besteht keine Notwendigkeit, die Regexes in SQL zu übersetzen?

Hier ist ein Datenmodell, wohin ich gehe, das ist überhaupt nicht sicher; es wird durch Ihre Antworten moduliert. Um es klar zu sagen:

  • Sechste Normalform ist Die Zeile besteht aus dem Primärschlüssel und höchstens einem Attribut.

  • Ich habe (6.1) nicht (6) gezeichnet, weil Ihre Daten meine Überzeugung bestärken, dass Sie eine reine relationale 6NF-Datenbank benötigen

  • Mein Produktcluster-Datenmodell , das Besser-als-EAV-Beispiel, ist 6NF, dann wieder normalisiert (nicht im Sinne der Normalform) durch DataType, um die Anzahl der Tabellen zu reduzieren, die Sie bereits gesehen haben. (EAV-Leute entscheiden sich normalerweise für einen oder mehrere riesige Tische.)

  • Dies ist gerade 5NF, mit nur den 2 Tabellen auf der rechten Seite in 6NF.

Link zum Spieldatenmodell

Link zur IDEF1X-Notation für diejenigen, die mit dem Relational Modeling Standard nicht vertraut sind.

Antwort auf Edit Nr. 2 vom 5. Dez. 10

1.1. Ok, korrigiert.

1.2. Dann ist IsUnique ein Indikator (boolean) für Item.

1.3. Handlung. Ich verstehe. Also, wo wirst du es speichern?

1.4. NeckMiscellaneous bedeutet, dass der Artikel in beiden Kategorien von Neck enthalten ist und Misc . Das bedeutet zwei separate Item.Name=Emberspark Pendant , jeweils mit einer anderen Kategorie.

.
2. und 5. Sie brauchen also eine schnelle, schnelle, speicherresidente Datenbank. Deshalb versuche ich, Sie über die Grenze zu bringen, weg von GridLand, hin zu RelationalLand.
.
3. Ok, wir bleiben bei der fünften Normalform, keine Notwendigkeit für 6NF oder den Product Cluster (Tabellen pro Datentyp). Soweit die Values sind alles ganze Zahlen.
.
4. Ich sehe zusätzlich:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Bits sind boolesche Werte { 0 | 1}. Vektoren werden für (relationale) Projektionen benötigt. Wir kommen später darauf zurück.
.
6. Ok, Sie haben erklärt, Sie übersetzen keine regulären Ausdrücke in SQL. (Slog bedeutet harte Arbeit)..
7. Was ist Category.ParentId ? Eltern-Kategorie ? Das ist noch nie vorgekommen.
.
8. Attribute.GeneratedId ?

Bitte bewerten Sie das Datenmodell (aktualisiert). Ich habe ein paar weitere Spalten, zusätzlich zu dem, was Sie in Ihrem haben. Wenn Sie etwas im Datenmodell nicht verstehen, stellen Sie eine spezifische Frage. Sie haben das Notation-Dokument gelesen, oder?

Ich habe Action als Tabelle, mit ItemAction hält den Value :
Equip: increase attack power by 28 ist Action.Name =Increase attack power by und ItemAction.Value =28.