Подход на основе псевдонима
В этом подходе таблица измерений Address
будет иметь псевдонимы HomeAddress
и BillAddress
, а ID
из обеих этих двух таблиц будут связаны со столбцами HomeAddressId
и BillingAddressId
таблицы Customer
соответственно. В этом шаблоне проектирования, когда вы задаете такой вопрос,
всем клиентам с выставлением счетов или домашним адресом в Техасе
Это будет преобразовано в такой запрос:
SELECT Customer.*
FROM Customer
LEFT OUTER JOIN Address HomeAddress ON Customer.HomeAddressId = HomeAddress.Id
LEFT OUTER JOIN Address BillAddress ON Customer.BillingAddressId = BillAddress.Id
WHERE HomeAddress.Name = 'Texas' OR BillAddress.Name = 'Texas'
В идеале псевдонимы будут определены на уровне отчетов (например, Universe
в SAP Business Objects) или уровне запроса.
Подход к таблице мостов
В этом подходе вы создадите новую таблицу мостов для хранения отношения между Customer
и Address
в соответствии с типами. Этот подход не является «размерным» подходом как таковой, но может использоваться в многомерном моделировании в форме таблицы фактов без фактов.
CustomerID | Type | AddressID
-----------------------------------
1 | Home | 10
2 | Home | 20
2 | Bill | 30
3 | Home | 10
3 | Bill | 40
Запрос в этом подходе будет иметь форму,
SELECT DISTINCT Customer.*
FROM Customer, CustomerAddress, Address
WHERE Customer.ID = CustomerAddress.CustomerID
AND Address.ID = CustomerAddress.AddressID
AND Address.Name = 'Texas'
Этот подход более применим в случаях, когда вам нужно проанализировать отношения между клиентами, принадлежащими к одному адресу.
Не уверен, что именно это вы искали, но надеюсь, что ответ будет полезен для вашей визуализации и дизайна.
person
hashbrown
schedule
21.01.2014