지속적인 편집으로 주문 데이터 무결성 유지
여러 테이블(Order, order_model, product)에 걸쳐 제품과 주문 정보를 추적하는 시스템을 사용하고 있는 경우
orders
id INT(11)
shipping_name VARCHAR(255)
shipping_street VARCHAR(255)
shipping_city VARCHAR(255)
[etc]
order_details
id INT(11)
order_id INT(11)
product_id INT(11)
products
id INT(11)
name VARCHAR(255)
description VARCHAR(255)
price DECIMAL(8,2)
구조는 매우 단순하다.order
여러 개의order_items
,order_items
있다product
.
문제는 누군가가 제품을 편집하면 이전 주문의 데이터가 수정된다는 것입니다.직원이 나중에 그 정보를 다시 보게 되면 주문 당시 고객이 받은 것과 동일한 정보가 없을 수 있습니다.
베스트 프랙티스는 무엇입니까?제품 테이블에 'display_item' 필드를 추가하고 편집/삭제 시 디스플레이를 0으로 설정하고 편집한 제품을 새 행으로 추가해야 합니까?order_description에 이름, 설명, 가격을 복사해야 합니까?
데이터베이스 정규화가 "파탄"되는 경우 중 하나라고 생각합니다.
생각할 수 있는 해결책:
- 각 주문에 대한 제품 속성의 복사본을 보관합니다.이는 스토리지 측면에서 비용이 많이 들지만 주문에 저장된 제품 데이터를 더 쉽게 추적할 수 있습니다.
- 시간 내에 변경할 수 있는 속성 로그를 만듭니다.제품 속성은 시간이 지남에 따라 변경될 수 있으므로 수정 날짜를 저장하는 로그를 통해 제품 속성을 주문 시점까지 필터링할 수 있습니다.
옵션 1의 제안
의 복사본을 만듭니다.products
(1 대 1)의 관계를 작성한다.order_details
각 주문 및 주문 상세에 대한 표입니다.
옵션 2의 제안
를 분할하다products
테이블이 둘로 분할됩니다.product_general_info
그리고.product_attributes
제품의 일반정보는 시간이 지남에 따라 안정되는 것을 의미합니다(제품의 일반정보는 변경되지 않습니다). 이 표의 데이터에 대한 수정은 주문 세트 전체에 반영됩니다.제품 속성에는 다음이 있어야 합니다.date
또는timestamp
value를 지정하여 Atribut이 변경된 시기를 정의합니다.그런 다음 데이터베이스를 쿼리하고 주문 날짜 이전 또는 날짜의 마지막 레코드를 반환할 수 있습니다.
언급URL : https://stackoverflow.com/questions/19306098/maintaining-order-data-integrity-with-constant-edits
'programing' 카테고리의 다른 글
어레이에 추가하는 방법 (0) | 2022.11.13 |
---|---|
JavaScript를 사용하여 '터치 스크린' 장치를 감지하는 가장 좋은 방법은 무엇입니까? (0) | 2022.11.05 |
MySQL이 여러 문자를 대체할 수 있습니까? (0) | 2022.11.05 |
케이스/스위치 스테이트먼트에 대응하는 Python은 무엇입니까? (0) | 2022.11.05 |
MySQL 함수는 두 날짜 사이의 근무 일수를 구합니다. (0) | 2022.11.05 |