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)