it-swarm-eu.dev

Che ne dite di memorizzare singoli record e le loro categorie in una tabella

Sto sviluppando il mio componente per Joomla. So che in molti componenti i singoli record e le loro categorie sono memorizzati in diverse tabelle del database. Ma che ne dici di memorizzarli in UNA tabella usando i genitori? Ogni record e "categoria" hanno in comune titolo, contenuto/descrizione, metadati, campo principale e altri dati. I genitori per i record sono le loro categorie e i genitori per le categorie sono le loro categorie principali (se necessario). E nella mia tabella c'è la colonna tipo (= record o = categoria) e posso semplicemente gestirli nelle mie viste. In questo modo minimizza le query sql e il numero di modelli/viste. Posso capire che è un'idea nuova e forse strana, ma è utile semplificare le cose in questo modo e quali problemi potrebbero presentarsi in futuro?

AGGIORNATO: E se l'archiviazione delle relazioni in tale tabella è una cattiva idea che ne dici di archiviare titoli, contenuti, metadati e altri dati in comune in una tabella ma solo le relazioni dei genitori (id, parent_id) in un'altra tabella ?

2
stckvrw

Secondo la teoria SQL, una relazione 1: N deve essere rappresentata da una tabella. In questo modello, qualsiasi query può navigare le informazioni in modo coerente.

Dimenticando la teoria, è possibile memorizzare i valori delle relazioni in un campo, ad esempio come un array con codifica Json. Tuttavia, avrai bisogno in qualche modo di analizzare questo "campo multivalore" per gestirlo. In LAMP, non è possibile in MySQL e dovresti accedervi tramite PHP.

Per esplorare modi alternativi di rappresentare un oggetto: Jooctrine - Doctrine ORM in Joomla!

3
Anibal

Non consiglierei davvero di farlo. Joomla esegue database relazionali (mySQL, postgre ecc.) Ottimizzati per gestire tabelle relazionali. Quello che stai descrivendo è più in linea con l'uso di un database noSQL (mongo, couchdb) che memorizza documenti che spesso consolidano i dati gerarchici. Joomla non supporta nativamente tali database e come tale non consiglierei di usarli insieme a un sito Joomla a meno che non sia veramente necessario.

Vorrei andare con una classica progettazione di database relazionali. Joomla ha una tabella #__categories e classi di categorie (e viste credo) già impostate per te (dai un'occhiata a com_content o com_weblinks per vedere come vengono utilizzate). Hanno anche il vantaggio di usare set nidificati piuttosto che una semplice relazione padre/figlio ( http://en.wikipedia.org/wiki/Nested_set_model ).

Verificherei quindi le query generate: sarei molto sorpreso se fossero il collo di bottiglia nella tua applicazione. Innanzitutto attiva l'opzione di debug di Joomla in modo da poter vedere le query generate e il tempo impiegato per eseguirle. Quindi, se vedi delle query lente, usa EXPLAIN di mySQL per capire cosa sta succedendo all'interno di mySQL per quella particolare query. 9 volte su 10 se si verificano problemi di prestazioni è perché nel database manca un indice. L'uso di EXPLAIN dovrebbe aiutarti a capire se è così.

Se stai vedendo un sacco di codice duplicato tra viste/modelli ecc., Allora il posto da gestire che si trova nell'applicazione stessa, non nella progettazione del database. Quindi, ad esempio, puoi scrivere una classe di vista astratta che consolidi il tuo codice duplicato e da cui erediterebbero tutte le altre classi di vista.

Per riassumere direi: progettare un database relazionale, far funzionare la tua app, quindi testare SE ci sono problemi di velocità. È sempre più facile risolvere qualcosa che preoccupa possibilmente di dover risolvere un problema teorico

3
Rob Clayburn