La prima cosa che farei è consigliare di utilizzare un ORM come Linq-To-Sql o NHibernate che ti darà rappresentazioni di oggetti del tuo modello di dati che rendono molto più semplice gestire cose complesse come operazioni CRUD molti-a-molti.
Se un ORM non fa parte del tuo set di strumenti, ecco come apparirebbe in SOL.
Users UserAddresses Addresses ======= ============= ========= Id Id Id FirstName UserId City LastName AddressId State Zip
I nostri tavoli sono uniti in questo modo:
Users.Id -> UserAddresses.UserId Addresses.Id -> UserAddresses.AddressId
- Tutti i record in Utenti basati su Addresses.Id
SELECT Users.* FROM Addresses INNER JOIN UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN Users ON UserAddresses.UserId = Users.Id WHERE (Addresses.Id = @AddressId)
- Tutti i record negli indirizzi basati su Users.Id
SELECT Addresses.* FROM Addresses INNER JOIN UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN Users ON UserAddresses.UserId = Users.Id WHERE (Users.Id = @UserId)