Първото нещо, което бих направил, е да препоръчам използването на ORM като Linq-To-Sql или NHibernate което ще ви даде обектни представяния на вашия модел на данни, което прави много по-лесно обработването на сложни неща като много към много CRUD операции.
Ако ORM не е част от вашия набор от инструменти, ето как ще изглежда това в SOL.
Users UserAddresses Addresses
======= ============= =========
Id Id Id
FirstName UserId City
LastName AddressId State
Zip
Нашите таблици са свързани по следния начин:
Users.Id -> UserAddresses.UserId Addresses.Id -> UserAddresses.AddressId
- Всички записи в Users въз основа на 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)
- Всички записи в Адреси въз основа на 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)