sql >> Databáze >  >> RDS >> Mysql

Potřebujete tip na jednoduchý návrh databáze MySQL

Proč máte attribute tabulka ?

Atributy jsou sloupce, nikoli tabulky.

Odkaz na web nám nic neříká.

Celá myšlenka databáze spočívá v tom, že pro každý dotaz připojíte podle potřeby mnoho malých tabulek, takže si na to musíte zvyknout. Jistě, dá vám mřížku, ale krátkou a sladkou, bez nul. Co se snažíte udělat, je vyhnout se tabulkám; jít pouze s jednou masivní mřížkou, která je plná nul.

(výstřižek)

Nepřidávejte před názvy atributů (názvy sloupců) název tabulky, který je nadbytečný. To vám bude jasné, když začnete psát SQL, který používá více než jednu tabulku:pak můžete použít název tabulky nebo alias k předponu libovolných názvů sloupců, které jsou nejednoznačné.

Výjimkou je PK, která je plně vykreslena a v této podobě se používá všude tam, kde se jedná o FK.

Procházejte web a přečtěte si několik otázek SQL.

Až to uděláte, později se můžete zamyslet nad tím, jestli chcete strength a defense být atributy (sloupce) type; nebo ne. A tak dále.

Odpovědi na komentáře 30. listopadu 10

.
Výborně, rozumíte svým datům. Že jo. Teď chápu, proč jste měli tabulku atributů.

  1. Prosím, ujistěte se, že těchto 10 příkladů je reprezentativních, dívám se na ně pozorně.

    • Typ:Název drahokamu:Přívěsek Emberspark ... Nebo je typ NeckMiscellaneous?
    • Je Unique skutečným typem položky? Myslím, že ne
    • Action.Display "Vraťte se prosím k organizátorovi sezóny"
    • Kde jsou atributy pro AttackPower a HitRating ?
      .
  2. Kolik různých typů položek (z 35 000) existuje, ala můj příklad klastru produktů. Jiný způsob, jak tuto otázku vyjádřit, je, kolik variant existuje. Myslím tím smysluplně, ne 3500 položek ÷ 8 atributů?

  3. Změní se item_attributes bez vydání s/w (např. nová Inner Strength atribut) ?

  4. Na položku, jaké atributy se opakují (více než jeden); zatím vidím pouze akci?

  5. Je to hra, takže potřebujete db, která je pevná a velmi rychlá, možná plně rezidentní v paměti, že jo. Žádné nuly. Žádný VAR nic. Nejkratší datové typy. Nikdy nic neduplikujte (neopakujte se). Jste spokojeni s bity (booleany) a vektory?

  6. Potřebujete tyto regulární výrazy snadno přeložit do SQL, nebo jste spokojeni s vážným problémem pro každý z nich (tj. jakmile je zprovozníte v SQL, jsou docela stabilní a pak se s tím nepletete, pokud nenajdete chybu ) (žádný sarkasmus, vážná otázka) ?

    6.1 Nebo je to možná naopak:db je rezidentní na disku; jednou jej načtete do paměti; na tom spouštíte regulární výrazy během hraní; občas zápis na disk. Proto není potřeba překládat regulární výrazy do SQL?

Zde je datový model toho, kam mířím, to není vůbec jisté; bude to modulováno vašimi odpověďmi. Aby bylo jasno:

  • Šestá normální forma je Řádek se skládá z primárního klíče a nejvýše jednoho atributu.

  • Nakreslil jsem (6.1) ne (6), protože vaše data posilují mé přesvědčení, že potřebujete čistou relační databázi 6NF

  • Můj Datový model klastru produktů , lepší než EAV příklad, je 6NF, poté znovu normalizováno (ne ve smyslu normální formy) pomocí DataType, aby se snížil počet tabulek, které jste již viděli. (Lidé EAV obvykle jdou na jeden nebo několik gigantických stolů.)

  • Toto je rovnou 5NF, pouze 2 tabulky napravo v 6NF.

Odkaz na herní datový model

Odkaz na zápis IDEF1X pro ty, kteří neznají standard relačního modelování.

Reakce na úpravu #2 05. prosince 10

1.1. Dobře, opraveno.

1.2. Potom je IsUnique indikátorem (booleovský) pro položku.

1.3. Akce. Chápu. Kam to tedy uložíte?

1.4. NeckMiscellaneous znamená, že položka je v obou kategoriích Neck a Misc . To znamená dva samostatné Item.Name=Emberspark Pendant , každý s jinou kategorií.

.
2. a 5. Takže potřebujete rychlou a rychlou paměťově rezidentní databázi. Proto se vás snažím dostat přes čáru, pryč z GridLandu, do RelationalLand.
.
3. Dobře, zůstaneme u páté normální formy, nepotřebujeme 6NF nebo produktový klastr (tabulky podle datového typu). Zatím Values jsou všechna celá čísla.
.
4. Navíc vidím:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Bity jsou booleovské { 0 | 1}. Vektory jsou vyžadovány pro (relační) projekce. K nim se dostaneme později.
.
6. Dobře, vysvětlil jste, nepřekládáte regulární výrazy do SQL. (Slog znamená těžká práce)..
7. Co je Category.ParentId? Rodičovská Kategorie ? To tu ještě nebylo.
.
8. Attribute.GeneratedId ?

Vyhodnoťte prosím datový model (aktualizováno). Mám pár dalších sloupců, kromě toho, co máte ve svém. Pokud v datovém modelu něčemu nerozumíte, položte konkrétní otázku. Četl jsi dokument Notation, že?

Mám Action jako tabulku s ItemAction podržením Values :
Equip: increase attack power by 28 je Action.Name =Increase attack power by a ItemAction.Value =28.



  1. Parser pro Oracle SQL

  2. Hledání posledního indexu řetězce v Oracle

  3. použijte hodnotu sloupce jako název sloupce mysql

  4. funkce to_date se sysdate