Bình thường hóa các bảng hoạt động của bạn theo đề xuất của Transact Charlie, là một ý tưởng hay và sẽ tiết kiệm nhiều vấn đề đau đầu và vấn đề theo thời gian - nhưng có những thứ như bảng giao diện , hỗ trợ tích hợp với các hệ thống bên ngoài và bảng báo cáo , hỗ trợ những thứ như phân tích Chế biến; và những loại bảng đó không nhất thiết phải được chuẩn hóa - trên thực tế, thông thường, nó rất tiện lợi và hiệu quả hơn nhiều đối với chúng .
Trong trường hợp này, tôi nghĩ đề xuất của Transact Charlie cho các bảng hoạt động của bạn là một điều tốt.
Nhưng tôi sẽ thêm một chỉ mục (không nhất thiết là duy nhất) vào đối thủ cạnh tranh trong bảng Đối thủ để hỗ trợ các kết nối hiệu quả trên đối thủ cạnh tranh cho mục đích tích hợp (tải dữ liệu từ các nguồn bên ngoài) và tôi sẽ đặt một bảng giao diện vào hỗn hợp: Cạnh tranh.
Cạnh tranh phải chứa bất kỳ dữ liệu nào mà kết quả cạnh tranh của bạn có trong đó. Điểm quan trọng của bảng giao diện như bảng này là làm cho nó nhanh chóng và dễ dàng nhất có thể cắt và tải lại từ bảng Excel hoặc tệp CSV hoặc bất kỳ dạng nào bạn có dữ liệu đó.
Bảng giao diện đó không nên được coi là một phần của tập hợp các bảng hoạt động được chuẩn hóa. Sau đó, bạn có thể tham gia với Cạnh tranh theo đề xuất của Richard, để chèn hồ sơ vào Đối thủ cạnh tranh chưa tồn tại và cập nhật những thông tin đó (ví dụ: nếu bạn thực sự có thêm thông tin về đối thủ cạnh tranh, như số điện thoại hoặc địa chỉ email của họ).
Một điều tôi sẽ lưu ý - trong thực tế, Tên đối thủ, dường như đối với tôi, rất khó có thể là duy nhất trong dữ liệu của bạn . Trong 200.000 đối thủ cạnh tranh, rất có thể bạn có từ 2 David Smith trở lên. Vì vậy, tôi khuyên bạn nên thu thập thêm thông tin từ các đối thủ cạnh tranh, chẳng hạn như số điện thoại của họ hoặc địa chỉ email hoặc một cái gì đó có nhiều khả năng là duy nhất.
Bảng điều hành của bạn, Đối thủ cạnh tranh, chỉ nên có một cột cho mỗi mục dữ liệu đóng góp vào khóa tự nhiên tổng hợp; ví dụ: nó nên có một cột cho một địa chỉ email chính. Nhưng bảng giao diện nên có một vị trí cho các giá trị cũ và mới cho địa chỉ email chính, để có thể sử dụng giá trị cũ để tra cứu bản ghi trong Đối thủ cạnh tranh và cập nhật phần đó thành giá trị mới.
Vì vậy, Cạnh tranh phải có một số trường "cũ" và "mới" - oldEmail, newEmail, oldPhone, newPhone, v.v. Bằng cách đó, bạn có thể tạo một khóa tổng hợp, trong Đối thủ cạnh tranh, từ Đối thủ cạnh tranh, Email và Điện thoại.
Sau đó, khi bạn có một số kết quả cạnh tranh, bạn có thể cắt bớt và tải lại bảng Cạnh tranh từ bảng excel của bạn hoặc bất cứ thứ gì bạn có, và chạy một chèn hiệu quả để chèn tất cả các đối thủ mới vào bảng Đối thủ cạnh tranh và cập nhật một cách hiệu quả để cập nhật tất cả các thông tin về các đối thủ cạnh tranh hiện có từ Cạnh tranh. Và bạn có thể thực hiện một thao tác chèn để chèn các hàng mới vào bảng Cạnh tranh cạnh tranh. Những điều này có thể được thực hiện trong một thủ tục được lưu trữ ProcessCompetitionResults, có thể được thực thi sau khi tải bảng Cạnh tranh.
Đó là một mô tả thô sơ về những gì tôi đã thấy lặp đi lặp lại trong thế giới thực với Ứng dụng Oracle, SAP, PeopleSoft và danh sách các bộ phần mềm doanh nghiệp khác.
Một nhận xét cuối cùng tôi đưa ra là một nhận xét trước đây về SO: Nếu bạn tạo khóa ngoại bảo đảm rằng Đối thủ cạnh tranh tồn tại trong bảng Đối thủ trước khi bạn có thể thêm một hàng với Đối thủ cạnh tranh đó vào Đối thủ cạnh tranh, hãy đảm bảo rằng khóa ngoại được thiết lập để cập nhật theo tầng và xóa . Bằng cách đó nếu bạn cần xóa đối thủ cạnh tranh, bạn có thể thực hiện và tất cả các hàng được liên kết với đối thủ đó sẽ tự động bị xóa. Mặt khác, theo mặc định, khóa ngoại sẽ yêu cầu bạn xóa tất cả các hàng liên quan ra khỏi Cạnh tranh cạnh tranh trước khi nó cho phép bạn xóa Đối thủ cạnh tranh.
(Một số người cho rằng khóa ngoại không xếp tầng là một biện pháp phòng ngừa an toàn tốt, nhưng kinh nghiệm của tôi là chúng chỉ là một cơn đau kỳ lạ ở mông thường không chỉ đơn giản là kết quả của việc giám sát và họ tạo ra một loạt các công việc Đối với DBA. Đối phó với những người vô tình xóa nội dung là lý do tại sao bạn có các hộp thoại như "bạn có chắc chắn không" và nhiều loại sao lưu thông thường và nguồn dữ liệu dư thừa. Nó thực sự phổ biến đến mức muốn xóa một đối thủ cạnh tranh, có dữ liệu là tất cả Ví dụ như đã nhầm lẫn, hơn là vô tình xóa một cái rồi đi "Ồ không! Tôi không có ý đó! Và bây giờ tôi không có kết quả cạnh tranh của họ! Aaaahh!" , bạn cần phải chuẩn bị cho nó, nhưng trước đây là phổ biến hơn nhiều,Vì vậy, cách dễ nhất và tốt nhất để chuẩn bị cho cái trước, imo, là chỉ tạo các khóa ngoại và cập nhật tầng và xóa.)
NVARCHAR(64)
cột chính của bạn (và do đó: phân cụm) !! Trước hết - đó là một khóa rất rộng - lên tới 128 byte; và thứ hai là kích thước thay đổi - một lần nữa: không tối ưu ... Đây là lựa chọn tồi tệ nhất bạn có thể có - hiệu suất của bạn sẽ là địa ngục, và phân mảnh bảng và chỉ số sẽ ở mức 99,9% mọi lúc .....