Tôi đang làm việc với một lược đồ sao cho kho dữ liệu và tôi đang gặp vấn đề với các mục hàng và tiêu đề từ các nguồn dữ liệu khác nhau.
CREATE TABLE DataSourceAHeader
(
OrderId INT NOT NULL
,TotalCost MONEY NOT NULL
-- Date, etc...
);
CREATE TABLE DataSourceALine
(
OrderId INT NOT NULL
,LineNumber INT NOT NULL
-- Dates, etc...
);
CREATE TABLE DataSourceBLine
(
OrderId INT NOT NULL
,Cost MONEY NOT NULL
,LineNumber INT NOT NULL
);
Tôi có nguồn dữ liệu A và B đại diện cho cùng một dữ liệu theo những cách khác nhau. Nguồn dữ liệu A chứa các tiêu đề và chi tiết đơn hàng, nhưng nó chỉ có kết quả ròng (Tổng chi phí) trong tiêu đề. Nguồn dữ liệu B chỉ chứa các chi tiết đơn hàng và mỗi mục có kết quả (Chi phí).
Tôi có thể giữ hai bảng thực tế (một cho tiêu đề và một cho mục hàng), nhưng tôi đã nghiên cứu và có vẻ như không thể xem được. Có một chiến lược để đối phó với loại định dạng không khớp này hay chúng nên được lưu trữ trong các kho dữ liệu riêng biệt (một kho cho mỗi nguồn dữ liệu)?
Chiến lược hiện tại của tôi:
CREATE TABLE Fact.Order
(
Id BIGINT IDENTITY PRIMARY KEY
,OrderId INT NOT NULL
,Cost MONEY NOT NULL
-- Date key, etc...
);
CREATE TABLE Fact.OrderLine
(
Id BIGINT IDENTITY PRIMARY KEY
,OrderFactId BIGINT NOT NULL REFERENCES Fact.Order (Id)
,LineNumber INT NOT NULL
-- related line stuff
);
DataSourceAHeader
và DataSourceBLine
được chèn vào Order
và OrderLine
. DataSourceBLine
được chia một dòng trên mỗi hàng.
Đây là một ví dụ cho một DataSourceAHeader
vàDataSourceALine
SELECT * FROM Fact.Order;
|------------------------------------|
| Id | OrderId | Cost |
| 1 | 1100 | 12000.00 |
| 2 | 1101 | 10000.00 |
|------------------------------------|
SELECT * FROM Fact.OrderLine;
|-------------------------------------------|
| Id | OrderFactId | LineNumber |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 2 | 3 |
|-------------------------------------------|
Đây là một ví dụ cho một DataSourceBLine
SELECT * FROM Fact.Order;
|---------------------------------|
| Id | OrderId | Cost |
| 1 | 1000 | 12.00 |
| 2 | 1000 | 10.00 |
|---------------------------------|
SELECT * FROM Fact.OrderLine;
|-------------------------------------------|
| Id | OrderFactId | LineNumber |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
|-------------------------------------------|
Biên tập:
các TotalCost
trong tiêu đề không thể được đưa xuống mức dòng. Tôi đã nói chuyện với một người quen của kiến trúc sư và lời khuyên của anh ta là triển khai hai bảng thực tế riêng biệt, một cho tiêu đề (tóm tắt) và một cho các dòng (chi tiết) và chỉ có NULL
các giá trị cho thông tin dòng bị thiếu DataSourceA
.
Chỉnh sửa2:
Tôi đang cố gắng chung chung với OrderId vì tôi có thêm một số nguồn dữ liệu có thể chứa các lược đồ OrderId tương tự (va chạm). Tôi đã triển khai bảng Ánh xạ để dịch các định danh nguồn vào kho.
Chỉnh sửa 3:
Với ý định rằng câu hỏi này hữu ích cho nhiều người hơn là bản thân tôi, tôi muốn câu trả lời có các chi tiết sau (chủ yếu để biên dịch những gì mọi người đã suy luận về):
- Nói chung, các cách tiếp cận để giải quyết các tập dữ liệu rời rạc liên quan ở dạng tóm tắt / chi tiết (bảng thực tế đơn hoặc bảng tóm tắt / chi tiết thực tế) là gì?
- Những hạn chế của mỗi phương pháp là gì?
- Loại cấu trúc nào mà bảng thực tế có thể thực hiện để đối phó với dữ liệu bị thiếu (hoặc không liên quan)?
- (hai cách tiếp cận bảng thực tế) Trong trường hợp nào sẽ là khôn ngoan để cuộn xuống bản tóm tắt so với cuộn lên các chi tiết?
DataSourceBLine
. Mỗi mục hàng trở thành một hàng riêng biệt.