Newsgroup: it.comp.software.database
Titolo: Relazione molti a molti, soluzione migliore

Salve a tutti,
vi sottopongo un problema, so che forse e' stato gia' trattato 
ma sto  cercando la soluzione migliore per gestirlo, spero mi 
possiate aiutare al meglio :)
Ho un database di questo tipo:
tabella foto con varie foto, ogni foto ha associato un id_album
tabella commenti con vari commenti, ogni commento e' associato 
a un id_destinatario (cioe' l'id di cio' a cui e' riferito il 
commento, questo puo' essere una foto, una recensione, un file
etc, per cui possiamo avere id uguali nel campo id_destinatario, 
cio' che li differenzia e' la sezione, nel caso delle fotografie la
sezione e' 2 (sezione e' campo di commenti).
Riassumo per i piu' sbadati :)
Fotografie:
id_fotografia (PK)
id_album
Commenti
id_commento (PK)
id_destinatario 
id_sezione (per differenziare i vari destinatari)
Fatto questo, io devo contare i commenti di un album :D
Ok, si' lo so, inner join :)
Pero' con inner join non compaiono gli album con zero commenti; 
-"Usa left outer join!" Si' lo so, potrei farlo pero' non posso 
discrimare sulla base della sezione.
Quindi ipotizzo si tratti di una relazione molti-a-molti. 
Voi come risolvereste una questione del genere? Mi hanno 
consigliato una "tabella di bridge" da joinare con le tabelle 
commenti o fotografie a mio piacimento. Ma come deve essere 
composta questa tabella?
Grazie in anticipo e ciao :)
---
nightolo
GnuPG key id:AC347841
---


La tabella da creare deve avere come attributi le PK delle tabelle di
partenza.
Tali attributi costituiranno anche la PK di tale tabella.
Se la relazione tra le due entità (dal modello concettuale) ha ulteriori
attributi, tali attributi
saranno ulteriori campi della tabella creata.
ciao
euterpex

 ha scritto nel messaggio
news:FTG0c.2124$I6.4...@news4.tin.it...


 non ho capito nulla! Ecchecavolo :/
Ciao Vincenzo,
se hai a disposizione il database di esempio Northwind distribuito insieme
ad Access o SQL Server, osserva le relazioni che intercorrono tra le tabelle
Orders, Order Details e Products.
Order Details è la junction table che permette di mettere in relazione
molti-a-molti le tabelle Orders e Products (1 ordine può contenere +
prodotti, 1 prodotto può fare parte di più ordini).
La Primary Key (PK) di Order Details è composta e costituita dalle colonne
OrderID e ProductID, ovvero le PK delle tabelle Orders e Products.
Le colonne UnitPrice, Quantity e Discount si applicano ad un certo prodotto
di un certo ordine, pertanto è corretto che appaiano in Order Details.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 > attributi, tali attributi saranno ulteriori campi della tabella creata.
Nel nostro caso la relazione ha l'attributo "Data di inizio" quindi la
tabella Partecipazione, oltre ad avere  Codice e Nome (che costituiscono
insieme anche la PK) avrà come ulteriore attributo DataInizio.
In questo modo avremo nello schema logico finale:
Impiegato (Codice, Nome, Cognome,,,etc)...con Codice PK.
Progetto (Nome, Budget, DataConsegna,etc...) con Nome PK.
Partecipazione (Codice,Nome,DataInizio) con Codice,Nome PK.
Spero adesso di essere stato più chiaro.
ciao
euterpex