Tôi nên thêm một cột hoặc bảng 1-1 nếu thuộc tính thường là null


7

Có một thuộc tính duy nhất mới mà chúng ta cần thêm, chỉ liên quan đến một tập hợp con cụ thể (dưới 1%). Chúng tôi nghĩ rằng tốt hơn là thêm một bảng mới sẽ là 1-1, hơn là thêm một cột mới sẽ có Nulls 99% thời gian.

Là một bảng mới theo cách được ưu tiên?

Câu trả lời:


8

Nếu một trong những điều kiện sau là đúng thì có, hãy tiếp tục và tạo một bảng riêng.

  • Bạn đang làm việc trong SQL 2005 trở xuống
  • Cột mới của bạn là một trong các kiểu dữ liệu sau: Địa lý, Hình học, Hình ảnh, NText, Văn bản, Dấu thời gian hoặc loại dữ liệu do người dùng xác định
  • Không có giá trị mặc định
  • Không có quy tắc
  • Cột không phải là cột được tính toán

Nếu không có cái nào đúng thì bạn có thể sử dụng một SPARSEcột.

ALTER TABLE tablename ADD mysparsecolumn INT SPARSE NULL

Đây là BOL trên các cột SPARSE . Ngoài ra, bạn có thể muốn xem CÀI ĐẶT . Cột thưa thớt là một cột được tối ưu hóa cho các giá trị NULL và theo BOL sẽ không chiếm dung lượng khi giá trị là NULL. Có các bảng trong BOL sẽ cho bạn ý tưởng về khoản tiết kiệm thực tế được tạo bằng cách sử dụng SPARSEcác cột.

Tất cả những gì đang được nói nếu bạn muốn sử dụng một bảng riêng biệt, bạn chắc chắn có thể. Mặt trái là bạn sẽ mất một khoảng trống trên tất cả tùy thuộc vào độ lớn của khóa chính của bạn (mức tối thiểu bạn cần bao gồm trong bảng mới cùng với cột phụ) và nó bị chậm hơn một chút vì có thêm tham gia.


3

Nếu mối quan tâm chính của bạn là hiệu quả của việc lưu trữ và truy xuất dữ liệu, tôi khuyên bạn nên thêm một sparsecột mới trong bảng hiện có. Tuy nhiên, nếu bạn đang làm việc với hệ thống OLTP, bạn có thể có lý do chính đáng để chọn bảng mới có mối quan hệ 1-0..1.

Chẳng hạn, có nhiều ứng dụng cũ sử dụng mô hình hiện có có khả năng bị phá vỡ do cột mới. Ngoài ra, nếu một cột mới là bất kỳ blob nào, select *trong ứng dụng cũ (mặc dù thực tế đó không phải là một thực tiễn tốt, các truy vấn như vậy là khá phổ biến) sẽ ảnh hưởng đến hiệu suất.

Thứ hai, cột mới có thể được truy cập với mẫu khác nhau (giả sử, bạn chủ yếu đọc các cột cũ, nhưng thực hiện nhiều cập nhật của cột mới).

Ngoài ra, tôi đã thấy nhiều bảng được sử dụng ít nhiều được chuẩn hóa ngay từ đầu, nhưng kết thúc với hàng trăm cột; một số cột không được sử dụng nữa, một số cột khác không phù hợp với mô hình (tốt hơn là nói mô hình đã bị phá hủy). Ghi chú này có lẽ nằm ngoài phạm vi câu hỏi, nhưng theo tôi đáng nói đến ...

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.