Mysql
 sql >> Database >  >> RDS >> Mysql

Hai bisogno di un consiglio sul semplice design del db MySQL

Perché hai un attribute tabella ?

Gli attributi sono colonne, non tabelle.

Il collegamento al sito Web non ci dice nulla.

L'idea generale di un database è quella di unire le molte piccole tabelle, come richiesto, per ogni query, quindi è necessario abituarsi a questo. Certo, ti dà una griglia, ma breve e dolce, senza Null. Quello che stai cercando di fare è evitare le tabelle; vai con una sola griglia enorme, che è piena di Null.

(taglia)

Non prefissare i nomi degli attributi (nomi delle colonne) con il nome della tabella, che è ridondante. Questo ti sarà chiaro quando inizierai a scrivere SQL che utilizza più di una tabella:quindi puoi utilizzare il nome della tabella o un alias per anteporre qualsiasi nome di colonna ambiguo.

L'eccezione è il PK, che viene reso completamente e utilizzato in quella forma ovunque sia un FK.

Sfoglia il sito e leggi alcune domande SQL.

Dopo averlo fatto, in seguito, puoi pensare se vuoi strength e defense essere attributi (colonne) di type; o no. eccetera.

Risposte ai commenti 30 novembre 10

.
Eccellente, comprendi i tuoi dati. Giusto. Ora capisco perché avevi una tabella degli attributi.

  1. Assicurati che questi 10 esempi siano rappresentativi, li sto guardando da vicino.

    • Tipo:Nome gemma:Pendente Emberspark ... Oppure, NeckMiscellaneous è un tipo?
    • Unique è un vero ItemType? Penso di no
    • Azione.Visualizza "Restituisci a un organizzatore stagionale"
    • Dove sono gli attributi per AttackPower e HitRating ?
      .
  2. Quanti tipi diversi di articoli (di 35.000) ci sono, ad esempio il mio cluster di prodotti. Un altro modo per formulare questa domanda è quante varianti ci sono. Intendo, significativamente, non 3500 elementi ÷ 8 attributi?

  3. Gli item_attributes cambieranno senza una versione di s/w (es. un nuovo Inner Strength attributo) ?

  4. Per articolo, quali attributi ripetono (più di uno); finora vedo solo Azione?

  5. È un gioco, quindi hai bisogno di un db che sia stretto e molto veloce, forse completamente residente in memoria, giusto. Nessun nullo. Nessun VAR nulla. Tipi di dati più brevi. Non duplicare mai nulla (non ripetere te stesso). Sei soddisfatto dei bit (booleani) e dei vettori?

  6. Hai bisogno di tradurre facilmente quelle espressioni regolari in SQL, o sei soddisfatto di uno slog serio per ciascuna (ad es. una volta che le fai funzionare in SQL sono abbastanza stabili e quindi non si scherza, a meno che non trovi un bug ) (nessun sarcasmo, domanda seria) ?

    6.1 O forse è il contrario:il db è residente su disco; lo carichi in memoria una volta; esegui le espressioni regolari su quello durante il gioco; occasionalmente scrivendo su disco. Quindi non è necessario tradurre le espressioni regolari in SQL?

Ecco un modello di dati di dove mi sto dirigendo, questo non è affatto certo; sarà modulato dalle tue risposte. Per essere chiari:

  • La sesta forma normale è La riga è composta dalla chiave primaria e, al massimo, da un attributo.

  • Ho disegnato (6.1) non (6), perché i tuoi dati rafforzano la mia convinzione che hai bisogno di un database relazionale 6NF puro

  • Il mio Modello di dati del cluster di prodotti , l'esempio migliore di EAV, è 6NF, quindi normalizzato di nuovo (non nel senso della forma normale) da DataType, per ridurre il numero di tabelle, che hai già visto. (Le persone di EAV di solito scelgono uno o pochi tavoli giganteschi.)

  • Questo è 5NF dritto, con solo i 2 tavoli a destra in 6NF.

Link al modello di dati di gioco

Link a IDEF1X Notation per coloro che non hanno familiarità con il Relational Modeling Standard.

Risposta alla modifica n. 2 05 10 dicembre

1.1. Ok, corretto.

1.2. Quindi IsUnique è un indicatore (booleano) per Item.

1.3. Azione. Capisco. Allora dove lo conserverai?

1.4. ColloVarie significa che l'articolo è in entrambe le categorie di Neck e Misc . Ciò significa due Item.Name=Emberspark Pendant separati , ognuno con una Categoria diversa.

.
2. e 5. Quindi hai bisogno di un db residente in memoria veloce e veloce. Ecco perché sto cercando di portarti oltre il confine, lontano da GridLand, in RelationalLand.
.
3. Ok, rimaniamo con la quinta forma normale, non c'è bisogno di 6NF o del cluster di prodotti (tabelle per tipo di dati). Cerca i Values sono tutti numeri interi.
.
4. Posso vedere inoltre:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. I bit sono booleani { 0 | 1}. I vettori sono necessari per le proiezioni (relazionali). Ci occuperemo di loro più tardi.
.
6. Ok, hai spiegato, non stai traducendo espressioni regolari in SQL. (Slog significa lavoro duro)..
7. Che cos'è Category.ParentId ? Categoria genitore? Non è mai successo prima.
.
8. Attribute.GeneratedId ?

Si prega di valutare il modello di dati (aggiornato). Ho alcune colonne in più, oltre a quelle che hai nella tua. Se c'è qualcosa che non capisci nel Modello dei dati, fai una domanda specifica. Hai letto il documento Notation, giusto?

Ho Action come tabella, con ItemAction tenendo il Value :
Equip: increase attack power by 28 è Action.Name =Increase attack power by e ItemAction.Value =28.