Domanda

scuso per il lungo tema, io non intendo per essere così a lungo, ma è un problema semplice abbastanza ho avuto. :)

esempio di farvi avere una semplice tabella chiamata tags che ha colonne tag_id e tag. Il tag_id è semplicemente una colonna di incremento automatico e il tag è il titolo del tag. Se ho bisogno di aggiungere un campo di descrizione, che sarebbe di circa 1-2 punti in media (circa max 3-4 paragrafi probabilmente), dovrei semplicemente aggiungere un campo descrizione al tavolo o devo creare un nuovo tag_descriptions tavolo chiamato e negozio le descrizioni con il tag_id?

Ricordo di aver letto che è meglio fare questo perché se si fa una query che non seleziona la descrizione, quel campo descrizione sarà ancora lenta mysql verso il basso. È vero? Non so nemmeno ricordo dove ho letto che da, ma sono stato sorta di seguito per un paio di anni a questa parte ... Alla fine mi domanda se ho bisogno di fare questo, ho la sensazione che non lo faccio. Faresti inoltre necessario inner join ogni volta che è necessario il campo descrizione.

Un'altra domanda che ho è, è generalmente male per creare nuove tabelle che conterrà solo pochissime righe in max? Che cosa succede se questi dati non si adatta altrove?

Ho un caso semplice di sotto della quale si riferisce a queste due domande.

Ho tre tabelle di contenuti, i tag e content_tags che compongono una relazione molti a molti:

contenuti

  • content_id
  • Colonna regione (enum con circa 6-7 valori diversi e la maggior parte probabilmente non crescerà in seguito)

tag

  • tag_id
  • tag

content_tags

  • content_id
  • tag_id

I desidera memorizzare una descrizione circa 1-2 punti per ogni tag, ma anche per ogni regione. Mi chiedo quale sarebbe il modo migliore per fare questo?

Opzione A:

  • Basta aggiungere una colonna alla descrizione tavolo tag
  • Creare una nuova tabella per region_descriptions

Opzione B:

  • Creare una nuova tabella denominata descrizioni con campi: ID, descrizione e il tipo
  • L'id sarebbe id del contenuto o id del campo enum
  • Il tipo sarebbe se si tratta di un tag descrizione, o regione descrizione (Userebbe la colonna enum per questo)

Forse ha una chiave primaria sul ID e tipo?

Opzione C:

  • Creare una nuova tabella per tag_descriptions
  • Creare una nuova tabella per region_descriptions

L'opzione A sembra essere una buona scelta se aggiungendo la colonna descrizione non rallenta MySQL selezionare le query che non hanno bisogno della descrizione.

Supponendo che la colonna descrizione rallenterebbe mysql, l'opzione B potrebbe essere una scelta buona. Esso elimina anche la necessità di un piccolo tavolo con solo 6-7 righe che avrebbero contenere le descrizioni regione. Anche se, ora che ci penso, sarebbe lento a connettersi a questo tavolo, se in origine per ottenere una descrizione regione avresti solo bisogno di passare attraverso pochissime righe.

L'opzione C sarebbe l'ideale se la descrizione colonne rallenterebbero mysql e se un piccolo tavolo come regione descrizioni non sarebbe questione.

Forse nessuna di queste opzioni sono i migliori, si sentono liberi di offrire un'altra opzione. Grazie.

P.S. Quello che sarebbe un tipo di colonna ideale da utilizzare per i dati sostengono che di solito 1-2 paragrafi, ma potrebbe essere un po 'più volte?

È stato utile?

Soluzione

Non credo che è importante se non si gestisce migliaia di query al minuto. Se avete intenzione di avere un triliardo di query al minuto, quindi vorrei attuare le varie opzioni ed eseguire parametri di riferimento per tutte queste opzioni. Sulla base dei risultati, si può prendere una decisione.

Altri suggerimenti

A mio parere (certamente un po 'disinformato), in realtà dipende da quanto userete entrambi.

Se correttamente indicizzato, che si uniscono non dovrebbe essere molto costoso. Inoltre, una tabella più grande sarà più lento. Inibisce la memorizzazione nella cache, e richiede più tempo per l'accesso roba, anche se l'indicizzazione seriamente mitiga questo problema.

Se entrerete a far parte i nomi dei tag di ID di tag molto, e solo raramente si prevede di utilizzare le descrizioni, direi andare con tavoli separati. Se sarete utilizzando le descrizioni più spesso, andare con un tavolo.

Per la prima parte della tua domanda:. Se si dispone di un tag con un ID, un nome e una descrizione, si dovrebbe salvare nella tabella 1

Ora, questa query

 SELECT name FROM tags WHERE id = 1;

non rallenterà se si dispone di 1, 2 o 20 campi supplementari in là.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top