2016-02-16 10 views
0

У меня есть два измерения в моем источнике данных DimAddress и DimGeoInforamtion. Если я хочу использовать иерархию из адресной таблицы, я получаю адрес, город и почтовый индекс из таблицы DimAddress, но я получу состояние из таблицы DimGeoInformation. Как я могу создать иерархию между ними>?Как я могу создать иерархию из двух разных измерений?

CREATE TABLE DimAddress 
(
    [AddressID] [int]IDENTITY(1,1) NOT NULL, 
    [Address] [varchar](MAX) NULL, 
    [ZipCode] [Varchar(5)] NULL, 
    [AddressSpatialID] [int] NULL,  
    [City] [varchar](50) NULL, 
    [CitySpatialID] [int] NULL, 
    [CityID] [int] NOT NULL 
) 

CREATE TABLE DimGeoInformation 
(
    [CountyID] [int] IDENTITY (1,1) NOT NULL, 
    [County] [varchar](50) NULL, 
    [CountySpatialID] [bigint] NULL,  
    [StateID] [tinyint] NOT NULL, 
    [State] [varchar](25) NOT NULL, 
    [RegionID] int 
    [RegionName] varchar(50)  
) 
+1

Если у вас нет сопоставления между ними, вы не можете. – mxix

+0

Что делать, если они оба подключаются через таблицу фактов? – Justin

ответ

1

Вы пытаетесь нормализовать схему звездочек. Искушение существует, потому что вы хотите не дублировать данные, но это компромисс хранилища данных.

Если вы хотите сделать это, лучшим способом будет «снежинка» вашей звездной схемы. Вам нужно будет присоединиться к вашей таблице фактов к размеру адреса и создать стандартный стиль реляционной базы данных из вашего измерения адреса в таблицу GeoInformation. Вам потребуется внешний ключ для таблицы GeoInformation в Dimension Address.

Я бы порекомендовал альтернативный подход: все эти поля были бы лучше в одной таблице измерений, а также в любых других полях контактной информации/местоположения. Это будет стоить вам небольшого дискового пространства в полях с низкой мощностью, таких как «Состояние», но это должно быть незначительным по сравнению с размером вашей таблицы фактов.

С меньшим количеством таблиц, меньше объединений и меньше клавиш, этот метод будет почти всегда намного проще и быстрее.