sql >> Databasteknik >  >> RDS >> Mysql

Behöver ett tips om enkel MySQL db-design

Varför har du ett attribute tabell ?

Attribut är kolumner, inte tabeller.

Webbplatslänken säger oss ingenting.

Hela idén med en databas är att du går med i de många små tabellerna, efter behov, för varje fråga, så du måste vänja dig vid det. Visst, det ger dig ett rutnät, men ett kort och gott, utan Nulls. Vad du försöker göra är att undvika tabeller; gå med bara ett massivt rutnät, som är fullt av nollor.

(klipp)

Prefix inte dina attributnamn (kolumnnamn) med tabellnamnet, det är överflödigt. Detta kommer att bli tydligt för dig när du börjar skriva SQL som använder mer än en tabell:sedan kan du använda tabellnamnet eller ett alias för att prefixa alla kolumnnamn som är tvetydiga.

Undantaget är PK, som återges fullt ut och används i den formen varhelst det är en FK.

Bläddra på webbplatsen och läs några SQL-frågor.

Efter att ha gjort det kan du senare fundera på om du vill hastrength och defense vara attribut (kolumner) av type; eller inte. Et cetera.

Svar på kommentarer 30 november 10

.
Utmärkt, du förstår dina uppgifter. Rätt. Nu förstår jag varför du hade en attributtabell.

  1. Se till att de 10 exemplen är representativa, jag tittar noga på dem.

    • Typ:Gem Namn:Emberspark Pendant ... Eller är NeckMiscellaneous en typ?
    • Är Unique en äkta ItemType? Jag tror inte
    • Action.Display "Vänligen återgå till en säsongsarrangör"
    • Var är attributen för AttackPower och HitRating ?
      .
  2. Hur många olika typer av artiklar (av 35 000) finns det, ala mitt Product Cluster-exempel. Ett annat sätt att ställa den frågan är hur många varianter det finns. Jag menar, menar, inte 3500 objekt ÷ 8 attribut?

  3. Kommer item_attributes att ändras utan en utgåva av s/w (t.ex. en ny Inner Strength attribut) ?

  4. Per artikel, vilka attribut som upprepas (fler än ett); än så länge ser jag bara Action ?

  5. Det är ett spel, så du behöver en db som är tight och väldigt snabb, kanske helt minnesbaserad, eller hur. Inga nollor. Ingen VAR Något. Kortaste datatyperna. Duplicera aldrig något (upprepa inte dig själv). Är du nöjd med bitar (booleaner) och vektorer?

  6. Behöver du enkelt översätta dessa regexes till SQL, eller är du nöjd med ett seriöst slag för varje (dvs. när du får dem att fungera i SQL är de ganska stabila och då bråkar du inte med det, om du inte hittar en bugg ) (ingen sarkasm, seriös fråga) ?

    6.1 Eller så är det kanske tvärtom:db:n är diskresident; du laddar den i minnet en gång; du kör regexes på det under spelet; ibland skriver till disk. Därför finns det inget behov av att översätta regexes till SQL?

Här är en datamodell över vart jag är på väg, detta är inte alls säkert; det kommer att moduleras av dina svar. För att vara tydlig:

  • Sjätte normalformen är Raden består av den primära nyckeln och högst ett attribut.

  • Jag har ritat (6.1) inte (6), eftersom dina data förstärker min övertygelse om att du behöver en ren 6NF Relationell databas

  • Min Produktklusterdatamodell , det bättre än EAV-exemplet, är 6NF, sedan Normaliserad igen (Inte i normal form) av DataType, för att minska antalet tabeller, som du redan har sett. (EAV-folk går vanligtvis efter ett eller några få gigantiska bord.)

  • Detta är rak 5NF, med bara de 2 tabellerna till höger i 6NF.

Länk till speldatamodell

Länk till IDEF1X-notation för dem som inte är bekanta med Relational Modeling Standard.

Svar på redigering #2 05 dec 10

1.1. Ok, rättad.

1.2. Då är IsUnique en indikator (boolean) för objekt.

1.3. Handling. Jag förstår. Så var ska du förvara den?

1.4. NeckMiscellaneous betyder att föremålet är i båda kategorierna Neck och Misc . Det betyder två separata Item.Name=Emberspark Pendant , var och en med olika kategori.

.
2. och 5. Så du behöver snabb snabb minnesresident db. Det är därför jag försöker få dig över gränsen, bort från GridLand, till RelationalLand.
.
3. Ok, vi stannar med Fifth Normal Form, inget behov av 6NF eller produktklustret (tabeller per datatyp). Så långt Values är alla heltal.
.
4. Jag kan dessutom se:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Bitar är booleska { 0 | 1}. Vektorer krävs för (Relationella) projektioner. Vi kommer till dem senare.
.
6. Ok, du har förklarat, Du översätter inte reguljära uttryck till SQL. (Slog betyder hårt arbete)..
7. Vad är Category.ParentId? Föräldrakategori ? Det har inte kommit upp tidigare.
.
8. Attribute.GeneratedId ?

Vänligen utvärdera datamodellen (uppdaterad). Jag har några fler kolumner, utöver det du har i din. Om det är något du inte förstår i datamodellen, ställ en specifik fråga. Du har läst notationsdokumentet, eller hur?

Jag har Action som en tabell, med ItemAction håller Value :
Equip: increase attack power by 28 är Action.Name =Increase attack power by och ItemAction.Value =28.



  1. Hur man pivoterar ett MySQL-entitet-attribut-värde-schema

  2. Gå runt JOIN-gränsen på 61 tabeller i MySQL genom att kapsla underfrågor inom varandra

  3. JDBC-teckenkodning

  4. Ingen funktion matchar det angivna namnet och argumenttyperna