Pierwszą rzeczą, którą chciałbym zrobić, to zalecić użycie ORM, takiego jak Linq-To-Sql lub NHibernate co da ci reprezentacje obiektowe twojego modelu danych, co znacznie uprości obsługę złożonych rzeczy, takich jak operacje CRUD wiele-do-wielu.
Jeśli ORM nie jest częścią twojego zestawu narzędzi, oto jak wyglądałoby to w SOL.
Users UserAddresses Addresses
======= ============= =========
Id Id Id
FirstName UserId City
LastName AddressId State
Zip
Nasze stoły są połączone w następujący sposób:
Users.Id -> UserAddresses.UserId Addresses.Id -> UserAddresses.AddressId
- Wszystkie rekordy w użytkownikach na podstawie 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)
- Wszystkie rekordy w adresach na podstawie User.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)