Tôi khá chắc chắn rất nhiều ứng dụng, ứng dụng quan trọng, ngân hàng và cứ thế làm điều này hàng ngày.
Ý tưởng đằng sau tất cả đó là:
- tất cả các hàng phải có lịch sử
- tất cả các liên kết phải được gắn kết
- thật dễ dàng để thực hiện các yêu cầu để có được các cột "hiện tại"
- khách hàng đã mua những thứ lỗi thời vẫn nên xem những gì họ đã mua mặc dù sản phẩm này không còn là một phần của danh mục nữa
và như thế.
Đây là những gì tôi muốn làm và tôi sẽ giải thích những vấn đề tôi gặp phải.
Tất cả các bảng của tôi sẽ có các cột đó:
id
id_origin
date of creation
start date of validity
start end of validity
Và đây là những ý tưởng cho các hoạt động CRUD:
- tạo = chèn hàng mới với
id_origin
=id
,date of creation
= now,start date of validity
= now,end date of validity
= null (= có nghĩa là bản ghi hoạt động hiện tại) - cập nhật =
- đọc = đọc tất cả các bản ghi với
end date of validity
== null - cập nhật bản ghi "hiện tại"
end date of validity
= null vớiend date of validity
= ngay bây giờ - tạo một cái mới với các giá trị mới và
end date of validity
= null (= có nghĩa là bản ghi hoạt động hiện tại)
- đọc = đọc tất cả các bản ghi với
- xóa = cập nhật bản ghi "hiện tại"
end date of validity
= null vớiend date of validity
= ngay bây giờ
Vì vậy, đây là vấn đề của tôi: với các hiệp hội nhiều-nhiều. Hãy lấy một ví dụ với các giá trị:
- Bảng A (id = 1, id_origin = 1, start = now, end = null)
- Bảng A_B (start = now, end = null, id_A = 1, id_B = 48)
- Bảng B (id = 48, id_origin = 48, start = now, end = null)
Bây giờ tôi muốn cập nhật bảng A, bản ghi id = 1
- Tôi đánh dấu bản ghi id = 1 bằng end = now
Tôi chèn một giá trị mới vào bảng A và ... chết tiệt, tôi đã mất mối quan hệ của mình A_B trừ khi tôi nhân đôi mối quan hệ này ... điều này cũng sẽ kết thúc với một bảng:
Bảng A (id = 1, id_origin = 1, start = now, end = now + 8mn)
- Bảng A (id = 2, id_origin = 1, start = now + 8mn, end = null)
- Bảng A_B (start = now, end = null, id_A = 1, id_B = 48)
- Bảng A_B (start = now, end = null, id_A = 2, id_B = 48)
- Bảng B (id = 48, id_origin = 48, start = now, end = null)
Và ... tôi cũng có một vấn đề khác: mối quan hệ A_B: tôi sẽ đánh dấu (id_A = 1, id_B = 48) có lỗi thời hay không (A - id = 1 đã lỗi thời, nhưng không phải B - 48)?
Làm thế nào để đối phó với điều này?
Tôi phải thiết kế nó ở quy mô lớn: sản phẩm, đối tác, v.v.
Kinh nghiệm của bạn về điều này là gì? Làm thế nào bạn sẽ làm (làm thế nào bạn đã làm)?
-- Biên tập
Tôi đã tìm thấy bài viết rất thú vị này , nhưng nó không giải quyết đúng đắn về "lỗi thời" (= những gì tôi đang hỏi thực sự)