sqler.com 커뮤니티에 다음과 같은
질문(http://www.sqler.com/411687)이 올라왔다.
두 개 이상의 테이블에서의 데이터 중복 방지가 가능한 방법이 있을까요?
물론 프로시저같은 프로그래밍 방법을 통해서가 아니라
데이터 입력시에 아예 그냥 제약이 걸릴 수 있는 방법이 있는 지 궁금합니다.
예를 택배, 물류센터, 수송차 라는 테이블이 있을 경우
택배 테이블 : 택배ID(PK), 택배명...
물류센터 테이블 : 물류센터ID(PK), 택배ID(FK)...
수송차 테이블 : 수송차ID(PK), 택배ID(FK)...
이 있으면 물류센터 테이블에 있는 택배ID 가 수송차 테이블에도 있으면
안되므로 하나의 택배ID 는 물류센터나 수송차 둘 중 하나에만 있어야
합니다.
프로시저로 걸러내는건 어렵지 않지만 가능하면 실수로라도 중복 입력되는 일 자체가
발생하게 하고싶지가 않은데... 방법이 없을까요? ㅠ
이렇게 답변을 달았다.
흠.. 질문의 내용으로 면 대충..이렇게 되것네요..
[택배] --< [입고] >-- [물류센터]
|
|
^
[출고] >-- [수송차]
[수송차]는 배송수단 중에 하나의 부분집합정도..
"하나의 택배ID 는 물류센터나 수송차 둘 중 하나에만 있어야" 한다는 제약조건은
데이터 모델이 좀 야리꾸리해서 나온 것이겠네요.
모델을 바꾸면 이 제약조건은 필요없게 되것슴다.
프로세스를 따라가면서 토큰을 잡는 식의 데이터 모델은 지양해야 합니다.
엔터티는 대략 잘 뽑으신듯한데.. 엔터티 간의 관계를 좀 더 생각하시면 질문의 내용은
아예 필요없게되겠네요..