programing

지속적인 편집으로 주문 데이터 무결성 유지

sourcejob 2022. 11. 5. 17:33
반응형

지속적인 편집으로 주문 데이터 무결성 유지

여러 테이블(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. 각 주문에 대한 제품 속성의 복사본을 보관합니다.이는 스토리지 측면에서 비용이 많이 들지만 주문에 저장된 제품 데이터를 더 쉽게 추적할 수 있습니다.
  2. 시간 내에 변경할 수 있는 속성 로그를 만듭니다.제품 속성은 시간이 지남에 따라 변경될 수 있으므로 수정 날짜를 저장하는 로그를 통해 제품 속성을 주문 시점까지 필터링할 수 있습니다.

옵션 1의 제안

의 복사본을 만듭니다.products(1 대 1)의 관계를 작성한다.order_details주문 및 주문 상세에 대한 표입니다.

옵션 2의 제안

를 분할하다products테이블이 둘로 분할됩니다.product_general_info그리고.product_attributes제품의 일반정보는 시간이 지남에 따라 안정되는 것을 의미합니다(제품의 일반정보는 변경되지 않습니다). 이 표의 데이터에 대한 수정은 주문 세트 전체에 반영됩니다.제품 속성에는 다음이 있어야 합니다.date또는timestampvalue를 지정하여 Atribut이 변경된 시기를 정의합니다.그런 다음 데이터베이스를 쿼리하고 주문 날짜 이전 또는 날짜의 마지막 레코드를 반환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/19306098/maintaining-order-data-integrity-with-constant-edits

반응형