@Dano đặt ra một số vấn đề được giải quyết tốt nhất trong một câu trả lời đầy đủ.
Một khó khăn , đã được @Celenius lưu ý, đó là sự kết hợp giữa B và A (theo một trong hai hướng) sao chép tất cả các trường; nó có thể là khó khăn để sửa điều này. Tôi đã đề xuất trong các ý kiến rằng cách dễ dàng rõ ràng (xuất sang bảng tính) đặt ra câu hỏi về tính toàn vẹn dữ liệu. Một khó khăn khác , đã được giải quyết theo đề xuất của Celenius, liên quan đến việc giải quyết vấn đề này khi không có sự kết hợp các thuộc tính nào có thể đóng vai trò là chìa khóa cho cả A và B, vì điều đó ngăn cản việc tham gia cơ sở dữ liệu. Sự tham gia không gian được giải quyết xung quanh vấn đề đó.
Điều gì, sau đó, là một giải pháp tốt? Một cách tiếp cận sử dụng A để xác định các bản ghi tương ứng của B chứa dữ liệu mong muốn. Tùy thuộc vào các giả định về cấu hình của đa giác - cho dù chúng trùng nhau, liệu một số có thể chứa các lớp khác, v.v. - điều này có thể được thực hiện theo nhiều cách khác nhau: sử dụng một lớp để chọn các đối tượng trong lớp kia hoặc thông qua các phép nối. Vấn đề ở đây là tất cả những gì chúng ta muốn làm trong giai đoạn này là chọn tập hợp con của B tương ứng với A.
Có được lựa chọn đó, xuất lựa chọn và để nó thay thế A. Xong .
Giải pháp này giả định rằng tất cả các trường trong B được dự định thay thế các đối tác của chúng trong A. Nếu không, thì thực sự cần thiết phải thực hiện nối 1-1 của B (nguồn) với A (đích). Phép nối dựa trên số nhận dạng là tốt nhất, nhưng làm cho phép nối với nhận dạng đa giác (Celenius) hoạt động tốt nếu id không có sẵn và không có cơ hội hình dạng đa giác tương ứng trong A và B có thể khác nhau, tuy nhiên hơi khác . . hoặc tự động thực hiện các thay đổi toàn cầu trong các chỉnh sửa cục bộ.)
Tại thời điểm này, có hai bản sao của mọi trường: nếu [Foo] là trường chung cho A và B, thì phép nối chứa A. [Foo] và B. [Foo]. Sử dụng phép tính trường , sao chép B. [Foo] vào A. [Foo]. Lặp lại cho tất cả các trường cần thiết. Sau khi hoàn thành, loại bỏ tham gia.
Mặc dù thủ tục này có thể hơi khó chịu khi có nhiều lĩnh vực tham gia, nhưng giá trị của nó bao gồm
- Nó là đơn giản và nhanh chóng để kịch bản.
- Scripting nó để lại một dấu vết kiểm toán ghi lại quá trình xử lý được thực hiện trên dữ liệu. Điều này là rất quan trọng để bảo vệ tính toàn vẹn dữ liệu.
- Nó bảo vệ chống lại một số loại lỗi bán buôn, chẳng hạn như giữ lại trường sai sau khi tham gia (do đó giữ dữ liệu cũ thay vì dữ liệu mới cho trường đó) hoặc xóa một trường quan trọng.
- Nó tận dụng các biện pháp phòng vệ tích hợp được cung cấp bởi hệ thống quản lý cơ sở dữ liệu, chẳng hạn như thực thi loại dữ liệu và thực thi quy tắc kinh doanh, hoạt động để ngăn chặn và xác định lỗi và duy trì tính nhất quán giữa tất cả các bảng và lớp trong cơ sở dữ liệu.
Một số nguyên tắc hướng dẫn liên quan đến đề xuất này là
- Sử dụng hệ thống quản lý cơ sở dữ liệu của bạn để xử lý dữ liệu thay vì sử dụng phần mềm không được thiết kế hoặc không phù hợp với nhiệm vụ này.
- Tránh thay đổi cấu trúc cơ sở dữ liệu (chẳng hạn như xóa hoặc thêm các trường) khi các hoạt động không hoàn toàn yêu cầu nó.
- Sử dụng các khả năng của phần mềm để tự động hóa để đơn giản hóa công việc, ghi lại tài liệu và làm cho các hoạt động có thể được tái tạo.
Người ta có thể phản đối rằng trong nhiều trường hợp, có những cách nhanh hơn và dễ dàng hơn để đạt được kết quả tương tự. Vâng, có thể có, và chúng có thể có hiệu quả và thường chúng hoạt động khi được thực hiện một cách cẩn thận. Nhưng các giải pháp có nguy cơ dữ liệu rất khó để đề xuất và bảo vệ như các câu trả lời cho mục đích chung. Chúng được sử dụng tốt nhất trong các tình huống một lần với các bộ dữ liệu nhỏ trong đó tham nhũng trong dữ liệu sẽ nhanh chóng trở nên rõ ràng và hậu quả của bất kỳ sai lầm nào là không quan trọng.