Sto implementando i tag nella mia domanda e risposta all'applicazione. Gli utenti saranno limitati ai tag disponibili dall'app, quindi non potranno sceglierne di propri. Quindi forse saranno disponibili solo 30-50 tag. Questo potrebbe cambiare in futuro, ma per ora questo è l'accordo.
Sto considerando due opzioni:
Opzione 1:
tabella delle domande: id, titolo, ecc tabella tag: id, name, question_id
Qui la relazione domande-tag è domande ha molti tag e tag appartiene alle domande. In questo modo è richiesto solo un join. Tuttavia, questa tabella di tag potrebbe avere molti duplicati se più di un utente sceglie ad es. tag "hotels". Nel qual caso, durante il recupero di un elenco di tag eseguirò un GROUP BY nell'istruzione SELECT. In questo modo è richiesto solo un join di tabella.
Opzioni 2:
tabella delle domande: id, titolo, ecc
tabella question_tags: id, question_id, tag_id
tabella tag: id, nome
In questo modo eliminerò la duplicazione, suppongo, quindi se due utenti selezionano le tabelle "hotel", "hotel" non viene memorizzato due volte .. ma richiede due join: domande (join) tags question_tags (join).
Dal punto di vista delle prestazioni (e senza dover dedicare del tempo a creare test usando migliaia di domande / tag per entrambi i casi), si preferisce l'uno rispetto all'altro? GROUP BY con un solo join di tabelle generalmente sarà più veloce di due join di tabelle in cui potrebbero esserci migliaia di domande, ognuna con alcuni tag propri?