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)