PDA

View Full Version : [mysql] Consiglio su progettazione database


sboby
28-06-2009, 12:32
E' giunta l'ora di provare a scrivere il mio primo sito dinamico . Ho deciso per un sito di recensioni musicali, con profili degli artisti e degli album. Nella progettazione del db ho avuto da subito qualche dubbio. Mi spiego. Ho una tabella "generi" con associazione N-N con 3 tabelle: artisti, album, utenti (per i generi preferiti).

Come è meglio agire in questi casi?


Creo 3 tabelle separate: generi_artisti, generi_album, generi_utenti
Creo un'unica tabella con un solo id per le tre tabelle e un campo che memorizza la tabella a cui ci si riferisce (idgenere, idaltro, tabella); dove idaltro può riferirsi alla chiave primaria di una delle tre tabelle
Creo un'unica tabella con 3 chiavi esterne(oltre a quella ovvia con riferimento alla tabella generi) per le 3 tabelle (idgenere, idartista, idalbum, idutente);


Stessa dubbio si ripresenta per i commenti e i voti! Un commento può essere riferito a un artista (nella pagina delle relativo profilo di quest'ultimo), a un utente o a una recensione. Il voto può essere dato a un album o alla recensione.

Vi sarei grato se mi chiariste le idee, grazie mille

Kralizek
28-06-2009, 14:15
il modo più corretto (scolasticamente parlando) per tradurre questo schema ER in uno schema DB è il seguente:

- Crei la tabella "Generi" per l'entità "Genere" (in realtà non è un'entità ma un attributo, ma conviene considerarlo come entità)

Per ogni entità in [ Artista, Album, Utente ]

- Crei una tabella che rappresentà l'entità (eg. Artisti)
- Crei una tabella associazione tra l'entità Genere e l'entità (eg. GenereArtista) che sarà composto da almeno 2 campi, una chiave esterna verso Genere ed una chiave esterna verso l'entità. Entrambi i campi andranno a comporre la chiave primaria della tabella.

Spero di essere stato utile ;)

sboby
28-06-2009, 15:06
Si si, ovvio che sono più entità separate. Il mio dubbio era su come giostrare le tabelle(o la tabella) che spezzano le N-N tra l'entità genere e le altre. Sul database attualmente è implementata la tua soluzione, solo che m'era venuto il dubbio:rolleyes: .
Però non sò, ciò significa che se avessi 20 entità da collegare all'entità genere, dovrei fare 20 tabelle per spezzare ogni N-N! Oppure in quel caso sarebbe meglio optare per la soluzione ad unica tabella MMM.

Naaaa, forse è meglio come avevo già fatto. Mi faccio sempre ste seghe mentali inutili:muro:

Grazie mille;)