Khi nào nên sử dụng kiểu dữ liệu XML


12

Tôi chịu trách nhiệm tạo cơ sở dữ liệu về một dự án. Chúng tôi có các trường hiếm khi có giá trị (cứ sau 10.000 bản ghi) và tôi đang cố gắng tìm ra cách tốt nhất để lưu trữ dữ liệu này trong cơ sở dữ liệu.

Theo như tôi thấy thì tôi có 3 lựa chọn:

  1. Thêm một cột trong bảng cho mỗi giá trị bổ sung
  2. Thêm một bảng được liên kết tham chiếu bảng gốc và chỉ có các bản ghi khi chúng ta cần lưu trữ một giá trị
  3. Sử dụng kiểu dữ liệu XML trong bảng gốc và lưu trữ tất cả các giá trị trong này.

Có lựa chọn nào khác mà tôi chưa xem xét không?

Tôi đang cố gắng tìm ra những ưu và nhược điểm của từng phương pháp. Theo như tôi có thể nói 1 sẽ là dễ nhất và 2 sẽ chiếm ít không gian nhất nhưng tôi đang vật lộn để tìm nhiều tài nguyên cho 3.


1
Để thêm một câu nói cá nhân chống lại lạm dụng xml trong cơ sở dữ liệu, tôi sẽ trả lời trực tiếp câu hỏi trong tiêu đề và nói một điều to tát: KHÔNG BAO GIỜ! Đối với cơ thể thực tế của câu hỏi tôi sẽ để các đồng nghiệp giúp bạn, bởi vì bạn đã có câu trả lời rất hay :-). PS: bạn thực sự có thể bỏ qua câu đầu tiên của tôi.
Mary

Có bao nhiêu lĩnh vực bạn đang nói về? Và họ có ý nghĩa là một phần của cùng một Thực thể không?
Andrew Bickerton

Câu trả lời:


12

Âm thanh giống như những gì bạn cần là các cột thưa thớtcác chỉ mục được lọc và đi với tùy chọn 1. Đây là các tính năng được hỗ trợ và ghi lại đầy đủ cho chính xác kịch bản này.

Công cụ cơ sở dữ liệu SQL Server sử dụng từ khóa SPARSE trong định nghĩa cột để tối ưu hóa việc lưu trữ các giá trị trong cột đó. Do đó, khi giá trị cột là NULL cho bất kỳ hàng nào trong bảng, giá trị không yêu cầu lưu trữ.

Tôi không thể tưởng tượng một giải pháp XML hoạt động tốt trong kịch bản này, nó sẽ có một lượng lớn siêu dữ liệu dư thừa và sẽ chậm truy vấn.


1
Tôi nghĩ rằng các cột thưa thớt là những gì tôi sau. Tôi hy vọng một lượng rất nhỏ dữ liệu sẽ được lưu trữ trong một số ít cột trên các bảng nhất định.
Matthew Steeples

Tôi không chắc chắn liệu tôi có đọc đúng hay không, nhưng theo liên kết này, các cột thưa thớt về cơ bản là một triển khai cơ sở dữ liệu về những gì tôi đang tìm kiếm dù sao đi nữa? blog.sqlauthority.com/2008/07/14/ từ
Matthew Steeples

Nếu nó được triển khai nội bộ như thế (và tôi không biết rằng đó là blog của ai đó) thì bạn sẽ không bao giờ phải tự xử lý hoặc phân tích cú pháp XML - nó sẽ hoạt động chính xác như một bảng thông thường (với bất kỳ hạn chế nào trên các kiểu dữ liệu)
Gaius

5
  1. Một cột không thể chiếm không gian nếu độ dài biến trong SQL Server. Thực tế là NULL được lưu trữ trong bitmap NULL . Bạn có thể lập chỉ mục nếu được yêu cầu với các chỉ mục được lọc để bạn bỏ qua các cột NULL.

  2. Thêm sự phức tạp khi bạn xem xét điểm 1.

  3. Đừng. Khó tìm kiếm, phân tích vv: bạn sẽ hối tiếc điều này sau

Nó cũng phụ thuộc vào kích thước: đây sẽ là char (1000) cho vài tỷ hàng? Hoặc tinyint cho hàng 100k? Nếu sau này xem xét độ phức tạp thêm của điểm 2: không đáng.


Bạn có tham chiếu rằng một cột nullable là null không có không gian. Tôi đã nhận thức được rằng nó có null hay không được lưu trữ trong bitmap null nhưng nghĩ rằng các trường có độ dài cố định mà dữ liệu vẫn được lưu trữ trong bảng. Kiểu dữ liệu tôi sẽ sử dụng cho hầu hết các giá trị này là tiền (vì vậy 8 byte)
Matthew Steeples

1
@Matthew Steeples: Tôi đã nói chiều dài biến không có khoảng trống. Và để tham khảo sqlskills.com/BLOGS/PAUL/carget/On-Disk-St Structures.aspx # p41 Làm thế nào các hàng cho 8 byte này?
gbn

Hiện tại chúng tôi có 500.000 hàng nhưng chúng tôi sẽ mở rộng (hy vọng) với tốc độ khoảng 1 triệu mỗi ngày trong khi chúng tôi sống đúng.
Matthew Steeples

3

Với SQL Server 2008, bạn có tùy chọn bổ sung là sử dụng các cột thưa thớt, được thiết kế riêng cho tình huống mà bạn đã đề cập.

Chúng có thêm lợi ích mà bạn có thể xem chúng như một đối tượng XML kết hợp bằng cách sử dụng XML COLUMN_SET hoặc tham chiếu chúng riêng lẻ và chúng cung cấp một khoản tiết kiệm không gian rất lớn.

Kiểm tra bài viết blog sau để biết thêm chi tiết: http://www.sqlskills.com/BLOGS/PAUL/post/Query-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx


-4

Tùy chọn thứ tư: không sử dụng bảng. Các bảng rất phù hợp với loại dữ liệu này (trên thực tế, với bất kỳ loại dữ liệu nào chưa được gắn vào dạng bảng). Chỉ cần sử dụng XML.


3
-1 như trong khi sự thật là "không sử dụng bảng" là một tùy chọn , câu trả lời rõ ràng nêu rõ một câu nói chống lại cấu trúc bảng và không thực sự gửi câu trả lời hữu ích.
Andrew Bickerton
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.