Một số cách để thực hiện mối quan hệ nhiều-nhiều trong kho dữ liệu là gì?


25

Các cấu trúc liên kết thống trị của mô hình Kho dữ liệu (Ngôi sao, Bông tuyết) được thiết kế với các mối quan hệ một-nhiều. Khả năng đọc, hiệu suất và cấu trúc truy vấn xuống cấp nghiêm trọng khi phải đối mặt với mối quan hệ nhiều-nhiều trong các sơ đồ mô hình hóa này.

Một số cách để thực hiện mối quan hệ nhiều-nhiều giữa các thứ nguyên hoặc giữa bảng thực tế và thứ nguyên trong kho dữ liệu và những thỏa hiệp nào chúng gây ra liên quan đến hiệu suất truy vấn và mức độ chi tiết cần thiết?


Bạn cần nêu câu hỏi của bạn rõ ràng hơn. Đây có thể là lý do tại sao không ai trả lời nó kể từ lần thứ 4. Những gì bạn nêu để trả lời câu trả lời của tôi không giống với câu hỏi ban đầu của bạn.
IamIC

@IanC Đã chỉnh sửa. Có tốt hơn không
Brian Ballsun-Stanton

hoàn hảo :)
IamIC

Câu trả lời:


17

Theo kinh nghiệm của tôi, một hệ thống phân cấp đệ quy là cách thực tế nhất để giải quyết vấn đề này. Nó cung cấp những lợi thế sau:

  1. Độ sâu không giới hạn.
  2. Nhỏ gọn.
  3. Mềm dẻo.
  4. Tốc độ.

Ngược lại, phải mất thêm một bảng cho mỗi cấp độ tham gia "-to-many". Điều này được mã hóa cứng và khó duy trì đối với các cập nhật lược đồ.

Bằng cách sử dụng các chỉ mục được lọc, một bảng lớn các phép nối phân cấp có thể thực hiện ở tốc độ cao hơn các bảng chuyên dụng. Lý do là mỗi lần tham gia chỉ là "cha-con" so với "tham gia bảng vào bảng dữ liệu". Cái sau có nhiều chỉ mục để xử lý và lưu trữ.

Tôi đã cố gắng giải quyết vấn đề này trong nhiều năm. Gần đây, đây là những gì tôi nghĩ ra.


1
Bạn đã hỏi "một số cách để mô hình hóa nhiều-nhiều và ý nghĩa hiệu suất và độ chi tiết của chúng là gì?". Tôi đã trả lời về mô hình. Không cần phải bỏ phiếu.
IamIC

4
Bạn cần cung cấp thêm dữ liệu về những gì bạn cần. Tôi đã khắc phục vấn đề chính xác mà bạn đã nêu thông qua hệ thống phân cấp đệ quy. Nhưng, không biết gì về dữ liệu của bạn và các kết nối của nó, rất khó để trả lời.
IamIC

2
Vâng, họ không thực sự mô hình hóa này. Điều gì sẽ là sai khi thêm một bảng và tham gia, do đó đạt được nhiều-nhiều? Trong RDBMS, bất kể bạn cấu trúc các bảng của mình như thế nào, bạn sẽ có 2 lần tham gia cho nhiều người. Không có phím tắt. Ngoại lệ duy nhất có thể là các mảng trong PostgreSQL hoặc Caché / M.
IamIC

1
. bảng kích thước tóm tắt. Câu trả lời của bạn về "hệ thống phân cấp đệ quy" là một câu trả lời thiết kế hữu ích khác. Tôi tự hỏi nếu có bất kỳ nghiên cứu về ý nghĩa hiệu suất của các hack khác nhau?
Brian Ballsun-Stanton

3
@Brian đừng quên phiếu bầu cho câu trả lời hữu ích. Nó giúp tạo ra cộng đồng. Để trả lời câu hỏi của bạn, tôi chưa bắt gặp bất kỳ nghiên cứu nào về các bản hack này, ngoại trừ "cái gì nhanh hơn: CTE đệ quy hoặc xây dựng cây thủ công?". Bạn đã nêu trước giải pháp có ý nghĩa tốt. Tôi sẽ kết hợp nó với một khung nhìn được lập chỉ mục, điều này tất nhiên đảm bảo bạn luôn có bản đồ quan hệ được điền trước chính xác.
IamIC

6

Một số kịch bản cho mối quan hệ M: M trong mô hình kho dữ liệu

Hầu hết các máy chủ OLAP và hệ thống ROLAP đều có phương tiện để xử lý cấu trúc dữ liệu M: M, nhưng có một số lưu ý về vấn đề này mà bạn sẽ cần chú ý. Nếu bạn thực hiện các mối quan hệ M: M, bạn sẽ cần để mắt đến lớp báo cáo của mình và những công cụ nào bạn muốn hỗ trợ.

Kịch bản 1: M: M kích thước trên bảng thực tế

Một ví dụ về điều này có thể là nhiều trình điều khiển trong chính sách động cơ. Nếu bạn thêm hoặc xóa trình điều khiển, giao dịch điều chỉnh chính sách có thể có mối quan hệ với danh sách các trình điều khiển thay đổi với điều chỉnh.

Tùy chọn 1 - Bảng cầu nối trình điều khiển M: M Điều này sẽ có khối lượng dữ liệu khá lớn, vì nó có các trình điều khiển x các hàng giao dịch cho một chính sách nhất định. SSAS có thể tiêu thụ cấu trúc dữ liệu này trực tiếp, nhưng truy vấn thông qua công cụ ROLAP chậm hơn.

Nếu mối quan hệ M: M của bạn dựa trên các thực thể dành riêng cho hàng thực tế (ví dụ: trình điều khiển trên xe hơi) thì điều này cũng có thể phù hợp với công cụ ROLAP, cung cấp công cụ ROLAP của bạn hỗ trợ các mối quan hệ M: M (ví dụ: sử dụng bối cảnh trong Kinh doanh Các đối tượng).

Tùy chọn 2 - Bảng thứ nguyên 'kết hợp' giả Nếu bạn đang ánh xạ danh sách các mã phổ biến vào bảng thực tế (nghĩa là các thực thể được liên kết không đặc biệt với hàng thực tế) thì bạn có thể thực hiện một cách tiếp cận khác sẽ làm giảm khối lượng dữ liệu. Một ví dụ về loại kịch bản này là các mã ICD trong một lần khám nội trú. Mỗi lần khám nội trú sẽ có một hoặc nhiều chẩn đoán và / hoặc các thủ tục được liệt kê chống lại nó. Các mã ICD là toàn cầu.

Trong trường hợp này, bạn có thể tạo một danh sách riêng biệt về sự kết hợp mã trên mỗi trường hợp. Tạo một bảng thứ nguyên với một hàng cho mỗi kết hợp riêng biệt và có một bảng liên kết giữa các kết hợp và các bảng tham chiếu cho chính các mã ICD.

Bảng thực tế có thể có khóa thứ nguyên cho thứ nguyên 'kết hợp' và hàng thứ nguyên có một danh sách các tham chiếu đến mã ICD thực tế. Hầu hết các công cụ ROLAP có thể tiêu thụ cấu trúc dữ liệu này. Nếu công cụ của bạn sẽ chỉ hoạt động với mối quan hệ M: M thực tế thì bạn có thể tạo chế độ xem mô phỏng mối quan hệ M: M giữa thực tế và bảng tham chiếu mã hóa. Đây sẽ là cách tiếp cận ưa thích với SSAS.

Ưu điểm của tùy chọn 1: - Được lập chỉ mục phù hợp, các truy vấn dựa trên việc chọn các hàng trong bảng thực tế có mối quan hệ nhất định thông qua bảng M: M có thể có hiệu quả hợp lý.

  • Mô hình khái niệm đơn giản hơn một chút

Ưu điểm của tùy chọn 2: - Lưu trữ dữ liệu nhỏ gọn hơn

  • Bạn có thể mô phỏng mối quan hệ 1: M thẳng bằng cách trình bày các kết hợp theo định dạng có thể đọc được dưới dạng mã trên thứ nguyên 'kết hợp'. Điều này có thể hữu ích hơn trên các công cụ báo cáo giả mạo thiếu hỗ trợ cho các mối quan hệ M: M.

Kịch bản 2: Mối quan hệ M: M giữa các kích thước:

Khó hơn để nghĩ về một trường hợp sử dụng, nhưng người ta có thể dự tính một cái gì đó từ chăm sóc sức khỏe với mã ICD một lần nữa. Trên hệ thống phân tích chi phí, chuyến thăm bệnh nhân nội trú có thể trở thành một chiều và sẽ có mối quan hệ M: M giữa chuyến thăm (hoặc tập tư vấn trong NHS-speak) và mã hóa.

Trong trường hợp này, bạn có thể thiết lập các mối quan hệ M: M và có thể mã hóa kết xuất chúng có thể đọc được của chúng trên kích thước cơ sở. Các mối quan hệ có thể được thực hiện thông qua các bảng liên kết M: M thẳng hoặc thông qua bảng 'kết hợp' bắc cầu như trước. Cấu trúc dữ liệu này có thể được truy vấn chính xác thông qua Đối tượng kinh doanh hoặc các công cụ ROLAP chất lượng tốt hơn.

Ngoài đỉnh đầu, tôi không thể thấy SSAS có thể tiêu thụ thứ này mà không cần đưa mối quan hệ ngay xuống bảng thực tế, vì vậy bạn sẽ cần trình bày quan điểm về mối quan hệ M: M giữa bảng mã và bảng thực tế hàng để sử dụng SSAS với dữ liệu này.


5

Tôi muốn biết chính xác loại mối quan hệ nhiều-nhiều mà bạn có trong mô hình của mình, vì nó nằm trong hệ thống giao dịch hoặc bất kỳ mô hình dữ liệu nào hiện có.

Thông thường, mối quan hệ nhiều-nhiều giữa các chiều là sự thật về kích thước. Thực tế là một khách hàng đặt hàng từ một số văn phòng chi nhánh phục vụ nhiều khách hàng, hoặc một cái gì đó tương tự. Mỗi người trong số họ là một thực tế. Nó sẽ có một ngày hiệu quả hoặc một cái gì đó tương tự, nhưng mối quan hệ có thể là "thực tế ít hơn". Mối quan hệ có thể có các chiều khác ngoài khách hàng và văn phòng chi nhánh. Vì vậy, đó là một lược đồ sao điển hình với bảng thực tế (có khả năng ít thực tế) ở trung tâm. Làm thế nào ngôi sao này có thể liên quan đến các ngôi sao chiều khác trong kho rõ ràng sẽ phụ thuộc. Bất cứ khi nào bạn kết hợp các ngôi sao khác nhau, bạn sẽ làm như vậy trên các khóa doanh nghiệp và phải đảm bảo bạn không thực hiện các phép nối chéo vô ý.

Thông thường, người ta không báo cáo về các bảng mối quan hệ kích thước như vậy ở cùng mức độ với các bảng thực tế lớn hơn và khi họ thực hiện, nó không phải lúc nào cũng nhiều dữ liệu, vì vậy nó không có xu hướng ảnh hưởng đến hiệu suất. Trong trường hợp trên, bạn có thể xem xét việc sử dụng của khách hàng / chi nhánh theo thời gian, nhưng dữ liệu tốt hơn về số lượng đặt hàng thực tế sẽ có sẵn trong bảng thực tế đơn hàng của bạn, có lẽ cũng có các kích thước cho khách hàng, chi nhánh, v.v. hầu hết mọi người sẽ xem xét nhiều-nhiều (mặc dù một đơn đặt hàng có thể được xem xét để xác định mối quan hệ nhiều-nhiều từ khách hàng đến chi nhánh), do đó, điển hình hơn trong môi trường kho dữ liệu. Bạn sẽ chỉ thực hiện tổng hợp số trên các mô hình nhiều-nhiều nếu bạn đã đưa ra thông tin tóm tắt đến cấp độ mối quan hệ đó - tức là khách hàng, chi nhánh, tháng,


Câu trả lời tốt. Có hai trường hợp mà tôi đang khám phá ở đây. Một N: M giữa thực tế và kích thước, và 1: N: M giữa thực tế, kích thước và kích thước.
Brian Ballsun-Stanton

3
@Brian Ballsun-Stanton Khi bạn nói N: M giữa thực tế và kích thước, bạn có nghĩa là một thực tế nhất định có một số kích thước anh chị em không được phân biệt và khác nhau mà tất cả đều áp dụng, như thẻ cho câu hỏi? Vì vậy, một câu hỏi (thực tế) được gắn thẻ máy chủ sql, kho dữ liệu và một câu hỏi khác được gắn thẻ kho dữ liệu, máy chủ sql, kinh doanh thông minh. Tôi vẫn sẽ kéo nó thành một ngôi sao riêng cho thực tế gán thẻ (có một chút khác biệt so với thực tế câu hỏi). Nó sẽ có khả năng lập chỉ mục tuyệt vời và bạn sẽ có thể nắm bắt sự thay đổi kích thước rõ ràng hơn.
Cade Roux

@Brian Ballsun-Stanton Đối với 1: N: M, đó là một bông tuyết, tôi đoán vậy, và tôi có xu hướng tránh điều đó. Nếu bạn muốn xác định các ngôi sao (hoặc cầu nối) khác cho mối quan hệ giữa các kích thước thì tốt. Hãy nhớ rằng kho dữ liệu thứ nguyên không được chuẩn hóa và trên hết, đó là một cấu trúc thực tế được thiết kế để hỗ trợ các loại hoạt động cụ thể, không thể hiện cụ thể mối quan hệ thực thể trong thế giới thực hoặc loại bỏ sự dư thừa.
Cade Roux

1
@Brian Ballsun-Stanton Hãy xem Diễn đàn Kimball và những gì anh ta gọi là cầu nối và những kẻ phá hoại
Cade Roux

@Cade Bạn có thể đưa ra một câu trả lời mô tả những người? :)
Brian Ballsun-Stanton

5

Dưới đây là một số bài viết có liên quan từ Kimball và những bài viết khác có thể áp dụng để mô hình hóa một mối quan hệ nhiều-nhiều được đề xuất. Lưu ý rằng mối quan hệ nhiều-nhiều chỉ là một khái niệm trong mô hình logic / miền vấn đề. Trong một mô hình OLTP được chuẩn hóa, nó vẫn sẽ được xử lý bằng một bảng liên kết, tất nhiên, mỗi thứ một cách nhiều. Trong mô hình kho dữ liệu Kimball không được chuẩn hóa, có một số cách để thực hiện việc này, một trong số đó về cơ bản coi bảng liên kết đó là thực tế ở trung tâm của một ngôi sao. Một cái khác là một mảng các cột cờ.

Cuối cùng, sự lựa chọn sẽ phụ thuộc vào chính xác những gì bạn đang lập mô hình, cách nó thay đổi và cách bạn muốn báo cáo về nó. Đây là nơi mô hình hóa chiều và kho dữ liệu nói chung phân kỳ mạnh so với mô hình chuẩn hóa. Mô hình chuẩn hóa tập trung vào các mối quan hệ logic và lý thuyết trong dữ liệu, mà việc lưu trữ dữ liệu luôn để mắt đến các trường hợp sử dụng thực tế và không chuẩn hóa để thực hiện chúng.

Mô hình hóa hệ thống phân cấp thay thế bằng bảng cầu:

http://www.kimballgroup.com/wp-content/uploads/2012/05/DT62Alternative.pdf

Ba tùy chọn cho nhiều mối quan hệ (gắn liền với phân bổ chia sẻ số - xem các nhận xét cho một số thú vị qua lại)

http: //www.pythian.com/news/364/im Hiệning-many-to-many-Relationships-in-data-warehousing /

Thật không may, rất nhiều bài viết về Tuần thông tin / DBMS của Kimball không còn có liên kết tốt ...


Liên kết đến bài viết 'phân cấp thay thế' bị hỏng. Có thể bạn đang đề cập đến điều này: kimballgroup.com/html/designtipsPDF/DesignTips2004/ gợi
Endy Tjahjono

Cảm ơn các liên kết đến nhiều bài viết . Có 'Aha!' Khoảnh khắc từ nó.
Endy Tjahjono

Liên kết thứ hai đã chết. Đây là một liên kết mới hơn cho cùng một bài viết. Nó có phần bị cắt xén, tuy nhiên, và mất tất cả đồ họa của nó tại một số điểm. blog.pythian.com/,
posfan12

1

Một cách chúng ta có thể giải quyết điều này là có một bảng Fact chỉ có 2 cột, khóa ngoại từ 2 chiều có nhiều tàu quan hệ.


1
Làm thế nào để giải quyết vấn đề?
Brian Ballsun-Stanton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.