다소 단순화하기 위해 ... 사용자 EAV 데이터의 역사, 특히 주소를 가리키는 곳을 원합니다. 그러나 중복을 제거하는 것은 까다로울 수 있습니다.EAV 주소 기록을 데이터베이스에 어떻게 저장해야합니까?
주소에는 고유 한 테이블이 있습니다.
사용자는 users 테이블과 다른 엔티티 테이블의 표준 데이터 외에도 홀수 데이터를로드합니다. 이 이상한 사용자 데이터를 EAV 테이블에 넣을 계획이었습니다. 이 사용자 EAV 데이터는 주소 테이블에 저장된 주소를 가리키는 여러 항목을 포함 할 수도 있습니다.
변경 내역을 기록하고 싶습니다.
따라서 사용자의 주소가 일어날 필요가있다처럼 보이는 변경할 때이다 :
- 새로운 주소는 주소 테이블에 추가됩니다.
- 이전 주소 행을 가리키는 대신 이전 EAV 항목이 주소 테이블의 새 행을 가리 키도록 업데이트됩니다.
- EAV 행에 대한 변경은 많은 일처럼 보이지 않는 솔직히
(트리거를 사용합니다)를 EAV 기록 테이블에 기록되어 있지만 :
- 해야하는 이전 주소 테이블의 항목은 영원히 읽기 전용으로 유지됩니다. (예, 내 추측은 그렇습니다. 이전 기록은웨어 하우징 고려 사항이지만, 그렇게 보이는 것은 ... icky입니다.)
- 어떻게 이러한 주소 항목을 최소한 재사용 할 수 있습니까?
그것은 모두가 그렇게 더러운 것, 그리고뿐만 아니라 EAV (아마도 새로운 사용자 입력에 일치하는 기존 항목 제공하여) 당신은 사람의 주소의 역사를 추적하려는 경우, EAV 월)
. EAV는 주소로 잘 알려진 것처럼 최악의 구조에 사용됩니다. –
죄송합니다. 아마도 약간의 오해가있을 것입니다. (제 질문을 좀 더 구체적으로 수정했습니다).주소는 이미 테이블에 있습니다. 하지만 주소 인스턴스는 일종의 홀수 데이터 (선택적 및 다소 드문)이므로 참조가 EAV 테이블에 저장됩니다. 은 다음과 같습니다 : -><사용자 eav 테이블 (단일 행 참조)> -><주소 테이블> –
죄송합니다. 처음에는 당신을 따라 가지 않았습니다. 고객과 관련이있는 EAV 데이터가 해당 고객에 속한 주소와 관련이 있다면 올바른 경로 일 수도 있고 그렇지 않을 수도 있습니다. EAV 데이터가 주소에 어떤 방식으로 의존하는지에 달려 있습니다. 힘든 의존성인가, 부드러운 것입니까? 당신이 나를 따라 간다면 그것은 "고객의 청구 지 주소"또는 "우리가 그 청구서를 보낸 실제 장소"를 의미합니까? 진정으로 "칙칙한"부분은 이전 데이터를 제거합니다. 참조 무결성을 유지하려고하면 꽤 추해집니다. 그렇지 않으면 아마 옳은 길을 가고있을 것입니다. –