2012-01-02 78 views
6

sử dụng SQL Server 2005 phiên bản tiêu chuẩn với SP2SQL Server varbinary (max) và varchar (max) dữ liệu trong một bảng riêng biệt

Tôi cần phải thiết kế một bảng nơi tôi sẽ được lưu trữ một tập tin văn bản (~ 200KB) cùng với tên tệp, mô tả và ngày giờ.

Chúng ta có nên thiết kế một bảng nơi dữ liệu varchar (max) và varbinary (max) nên được lưu trữ trong một bảng riêng biệt hay cột cột của các kiểu dữ liệu LOB là một phần của bảng chính?

mỗi chủ đề này What is the benefit of having varbinary field in a separate 1-1 table?

không có hiệu suất hoặc lợi ích hoạt động mà tôi đồng ý với một số mức độ tuy nhiên tôi có thể thấy hai lợi ích

  1. cửa hàng những vào một bảng separatable có thể được lưu trữ trên một nhóm tệp riêng biệt
  2. bạn không thể tạo lại chỉ mục trên bảng chứa loại dữ liệu lob ONLINE

Mọi đề xuất sẽ được đánh giá cao.

+0

Câu hỏi thực tế của bạn ở đây là gì? Yêu cầu đề xuất không phù hợp với định dạng StackOverflow. Những hạn chế của bạn là gì? – Oded

+0

Nói chung, trong điều khoản của thiết kế cơ sở dữ liệu những gì được recommnded? bạn được tự do đưa ra ý kiến ​​của mình. Tôi sẽ không tranh luận về nó. bảng sẽ đứng coupld hàng triệu hàng varchar (max) cột sẽ không null. –

+0

Vấn đề là bạn đang hỏi ý kiến ​​- không phải cái gì được khuyến khích ở đây trên StackOverflow. – Oded

Trả lời

7

Tôi sẽ khuyên bạn không nên ly thân. Nó làm phức tạp các thiết kế đáng kể cho ít hoặc không có lợi ích. Như bạn đã biết, SQL Server đã lưu trữ các LOB trên các đơn vị phân bổ riêng biệt, như được mô tả trong Table and Index Organization.

Mối quan tâm đầu tiên của bạn (phân bổ tệp riêng biệt cho dữ liệu LOB) có thể được giải quyết một cách rõ ràng, như Mikael đã chỉ ra, bằng cách chỉ định một cách thích hợp nhóm tệp mong muốn trong câu lệnh CREATE TABLE.

Mối quan tâm thứ hai của bạn không còn là mối quan tâm với SQL Server 2012, xem Online Index Operations for Indexes containing LOB columns. Ngay cả trước SQL Server 2012, bạn có thể sắp xếp lại các chỉ mục với LOB mà không gặp vấn đề gì (và REORGANIZE đang trực tuyến). Cho rằng xây dựng lại chỉ mục đầy đủ là hoạt động chi phí rất (dựng lại trực tuyến phải được thực hiện ở cấp độ bảng/chỉ mục, không có tùy chọn xây dựng lại trực tuyến), bạn có chắc chắn muốn làm phức tạp thiết kế để phù hợp một cái gì đó, một mặt, ít khi được yêu cầu, và mặt khác, sẽ có sẵn khi bạn nâng cấp lên SQL 2012?

+0

Remus, bạn là một máy chủ SQL thật sự @Microsoft. Tôi đánh giá cao ý kiến ​​của bạn. –

+0

Để Remus: Điều gì nếu một bảng có 2 cột VARCHAR (tối đa) hiếm khi được sử dụng và gây ra một bảng để phát triển nhanh chóng? Trong trường hợp này bạn sẽ chia thành một bảng riêng biệt? – user2966445

+0

@ user2966445: đặt câu hỏi dưới dạng câu hỏi riêng biệt, không phải là nhận xét. –

0

Tôi có thể trả lời câu hỏi của bạn bằng một từ đơn giản: Kiss.

Tất nhiên là viết tắt của ... Keep It Simple Stupid.

Thêm bảng cho thường không phải là không trừ khi bạn thực sự cần một giải pháp để giải quyết vấn đề.

Nói chung, tôi không đồng ý với việc chia bảng. Nó làm tăng thêm sự phức tạp cho cơ sở dữ liệu và mã. Có các cột vô ích trong một bảng là một điều xấu, nhưng nó không phải là xấu như nhiều bảng khi bạn chỉ cần một.

trường hợp bạn sẽ cân nhắc việc thêm bảng khác:

  1. Một số cột của bạn là Blob của dữ liệu (lớn hơn kích thước trang) và họ hiếm khi được sử dụng và các cột khác với kích thước dữ liệu nhỏ được truy cập thường xuyên.
  2. Nếu bạn thiếu bộ não.
  3. Nếu bạn là người xấu.
  4. Hoặc ... nếu bạn đang cố gắng chọc tức đồng nghiệp của mình.
Các vấn đề liên quan