Câu trả lời:
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.
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.
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 ...