2010-04-22 30 views

Trả lời

3

Tôi không biết. Nhưng không ai trả lời là, vì vậy tôi googled và thấy a best practises paper người dường như để nói rằng rất hữu ích "nó phụ thuộc" :-)

Trong khi ràng buộc khoá ngoại giúp toàn vẹn dữ liệu, họ có một chi phí liên quan trên tất cả chèn, cập nhật và xóa các câu lệnh. Hãy chú ý cẩn thận đến việc sử dụng các ràng buộc trong kho của bạn hoặc ODS khi bạn muốn đảm bảo tính toàn vẹn của dữ liệu và xác thực

7

Tôi giả sử bạn tham khảo các bảng FK. Trong quá trình tải DW, các chỉ mục và bất kỳ khóa ngoài nào bị giảm xuống để tăng tốc độ tải - quy trình ETL sẽ xử lý các khóa.

Ràng buộc khóa ngoài "kích hoạt" trong khi chèn và cập nhật (đây là khi cần kiểm tra giá trị khóa tồn tại trong bảng cha) và trong quá trình xóa khóa chính trong bảng chính. Nó không phát một phần trong khi đọc. Xóa các bản ghi trong một DW là (nên) là một quá trình được kiểm soát để quét mọi mối quan hệ hiện có trước khi xóa khỏi các bảng thứ nguyên.

Vì vậy, hầu hết các DW không có khóa ngoại được triển khai dưới dạng ràng buộc.

6

Quesiton rõ ràng, nhưng "thực hành tốt" có vẻ là câu hỏi sai.

"Có thể có FK là"?

Khóa ngoài là cơ chế để duy trì các ràng buộc toàn vẹn trong khi sửa đổi cơ sở dữ liệu.

Nếu DW của bạn là chỉ đọc (tích lũy nguồn dữ liệu mà không cần viết lại), không cần FK.

Nếu DW của bạn hỗ trợ viết, các constaints toàn vẹn thường cần phải được phối hợp trên các nguồn dữ liệu tham gia bởi ETL (thay vào đó, nó tương đương với Store). Quá trình này có thể hoặc không thể dựa vào FK trong cơ sở dữ liệu.

Vì vậy, câu hỏi đúng là: bạn cần chúng.

(Lý do duy nhất khác mà tôi có thể nghĩ đến sẽ là tài liệu về mối quan hệ - tuy nhiên, điều này có thể được thực hiện trên giấy/trong một văn bản riêng, quá.)

+0

+1. "Chìa khóa nước ngoài là một cơ chế để duy trì sự ràng buộc toàn vẹn trong quá trình sửa đổi cơ sở dữ liệu. Nếu DW của bạn là chỉ đọc, không cần cho FK ..." - Mắt của Bull! –

+2

Một số cơ sở dữ liệu có tối ưu hóa cụ thể tại các địa điểm cho kho dữ liệu có cấu trúc ngôi sao hoặc bông tuyết. Trong những trường hợp đó, ngay cả trên một tình huống chỉ đọc, các khóa ngoại có thể phục vụ để cảnh báo kho chứa cách ngôi sao được cấu trúc - để cho biết đó là thực tế và kích thước.Ngay cả trong cơ sở dữ liệu chuẩn hóa, các khóa ngoại có thể ảnh hưởng đến trình tối ưu hóa. Tôi đang đấu tranh để xác định khi nào và bao nhiêu vấn đề này bản thân mình ngay bây giờ, nhưng nó chắc chắn không có ảnh hưởng đến một số. – Chipmonkey

2

Lý do cho việc sử dụng một ràng buộc khoá ngoại trong một kho dữ liệu giống như đối với bất kỳ cơ sở dữ liệu nào khác: để đảm bảo tính toàn vẹn của dữ liệu.

Cũng có thể hiệu suất truy vấn sẽ được hưởng lợi bởi vì các khóa ngoại cho phép một số loại truy vấn viết lại mà không phải là bình thường nếu không có chúng. Tính toàn vẹn dữ liệu vẫn là lý do chính để sử dụng các khóa ngoại.

8

Ràng buộc FK hoạt động tốt trong các mô hình chiều Kimball trên SQL Server.Thông thường, ETL của bạn sẽ cần tra cứu bảng thứ nguyên (thường là trên khóa doanh nghiệp để xử lý thứ nguyên thay đổi chậm) để xác định ID thay thế thứ nguyên và id thay thế thứ nguyên thường là danh tính và PK trên thứ nguyên thường là id thay thế kích thước, đã là chỉ mục (có thể được nhóm).

Có RI tại thời điểm này không phải là một chi phí rất lớn với việc viết, vì nó cũng có thể giúp bắt lỗi ETL trong quá trình phát triển. Ngoài ra, có PK của bảng thực tế là một sự kết hợp của tất cả các FK cũng có thể giúp bẫy các vấn đề mô hình hóa dữ liệu tiềm năng và tải hai lần.

Nó thực sự có thể giảm phí trên các lựa chọn nếu bạn muốn sử dụng các chế độ xem dạng phẳng hoặc các hàm có giá trị bảng của các mô hình ngôi sao của bạn. Bởi vì các kết nối bên trong thêm vào kích thước được đảm bảo để tạo ra một và chỉ một hàng, do đó trình tối ưu hóa có thể sử dụng các ràng buộc này rất hiệu quả để loại bỏ nhu cầu tìm kiếm trong bảng. Nếu không có ràng buộc FK, các tra cứu này có thể phải được thực hiện để loại bỏ các sự kiện mà kích thước không tồn tại.

2

Sử dụng các ràng buộc FK trong DW giống như đội mũ bảo hiểm xe đạp. Nếu ETL được thiết kế chính xác, bạn về mặt kỹ thuật không cần chúng. Điều đó nói rằng, nếu tôi có một triệu đô la cho mỗi lần tôi nhìn thấy ETL không có lỗi, tôi sẽ không có đô la.

Cho đến khi bạn đang ở thời điểm mà các ràng buộc FK đang gây ra các vấn đề về hiệu suất, tôi nói là hãy để nguyên. Làm sạch các vấn đề toàn vẹn tham chiếu có thể khó hơn nhiều so với việc thêm chúng từ get-go ;-)

+0

Hơn 20 năm kinh nghiệm trong kho dữ liệu và dữ liệu của tôi đồng ý với bạn ... Các dự án thay đổi/phát triển và khách hàng (và nhà phát triển!) Có thể dễ dàng giới thiệu các thay đổi phá vỡ các giả định. Có FKs thực sự là một mạng lưới an toàn tuyệt vời - "xe đạp helment" đá như là một simile! Nếu không, tôi sẽ khuyến khích một giai đoạn "xác thực" cuối cùng của quá trình tải mà ít nhất là kiểm tra các ràng buộc/tính duy nhất trong dữ liệu. Câu trả lời tuyệt vời, Bill. –

0

Có một lý do rất tốt để tạo ra các ràng buộc FK trong thậm chí chỉ đọc DW/DM. Có, chúng không thực sự được yêu cầu từ quan điểm chỉ đọc DW, nếu ETL của bạn là chống đạn, v.v. Nhưng hãy đoán xem điều gì - cuộc sống không dừng lại ở dữ liệu tải trong DW. Hầu hết các công cụ phân tích/báo cáo BI đều sử dụng thông tin về các mối quan hệ DW của bạn để tự động xây dựng mô hình của chúng (ví dụ như mô hình bảng SSAS). Trong quan điểm khiêm tốn của tôi, điều này một mình lớn hơn chi phí nhỏ trên rơi và tái tạo các ràng buộc FK trong quá trình ETL.

2

Có, thực hành tốt nhất, thực hiện các ràng buộc FK trên bảng thực tế của bạn. Trong SQL Server, sử dụng NOCHECK. Trong ORACLE luôn sử dụng RELY DISABLE NOVALIDATE. Điều này cho phép nhà kho hoặc siêu thị biết về mối quan hệ, nhưng không kiểm tra nó trên các hoạt động INSERT, UPDATE hoặc DELETE. Sao biến đổi, tối ưu hóa, vv có thể không dựa vào các ràng buộc FK để cải thiện các truy vấn như họ đã từng sử dụng, nhưng không bao giờ biết công cụ BI hoặc OLAP nào sẽ được sử dụng ở mặt trước hoặc nhà kho hoặc siêu thị của bạn. Một số các công cụ này có thể sử dụng để biết các mối quan hệ được xác định. Thêm vào đó, có bao nhiêu nhà kho tìm kiếm xấu xí mà bạn đã thấy với ít hoặc không có tài liệu bên ngoài và phải cố gắng thiết kế lại chúng? Xác định các FK luôn giúp với điều đó.

Là nhà thiết kế, chúng tôi KHÔNG BAO GIỜ dường như làm cho kho dữ liệu của chúng tôi hoặc marts như tự tài liệu như chúng ta nên. Xác định FK chắc chắn sẽ giúp với điều đó. Bây giờ, đã nói điều này, nếu lược đồ sao được thiết kế đúng cách mà không có FK được xác định, thì thật dễ dàng để đọc và hiểu chúng.

Và đối với bảng thực tế ORACLE, hãy luôn xác định chỉ mục BITMAP LOCAL trên mọi FK thành thứ nguyên. Cứ làm đi. Việc lập chỉ mục thực sự quan trọng hơn FK đang được xác định.

Các vấn đề liên quan