나는 가족의 관계를 모델링하기로되어있는 프로그램을위한 데이터베이스를 만들고있다. 는 예 : X가 Y에 아버지, Y 그래서SQL 데이터베이스 디자인
, 내가 각 구성원에 대한 모든 정보와 회원 테이블 그래서 내가 회원들 사이에 많은 관계로 많은 만드는 방법에 대한 생각이 X에 아들 테이블 자체이므로 Member_Member 브리지 테이블 복합 키로 열 "FK_FromID, FK_ToID" (이 맞습니까?)과 "FK_RelationType" 같은 외부 키 에 RelationTypes 테이블을 구비되도록하는 것이다 관계가있다. "아버지, 어머니, 아들, 딸"그리고이 두 개의 외래 키에 대한 회원 테이블에서 일대일로 진행되는 두 가지 관계
내 문제는입니다. 내가 계단식으로 선택하면 삭제할 때주기를 만들 것입니다. 왜냐하면 내가 멤버를 지우면 관련 레코드에 대한 패스가 두 개가 삭제 될 것이기 때문이다. Member_Member 브릿지는 프로그램에서 아빠 관계를 삽입 할 때마다 Member_Member 테이블에 아들 관계를 삽입 할 것이고, 거기에는 방법이있다. 또는 연쇄 적 처리를 가능하게하는 회피 방법을 사용하면 회원을 삭제할 때 외래 키 열에서 또는에 기록 된 것과 관계없이 Member_member에있는 관련 레코드를 삭제합니다.
그래서, 무엇을 해야할지 모르겠지만, 이것이 처음부터 올바른 디자인입니까? , 사이클링에 관해서해야 할 일, 또한 같은 문제에 대한 더 나은 디자인이 두 당사자간에 어떤 종류의 관계를 지정해야 하는지를 알고 있어야한다고 생각합니까?
어떤 도움을 주셔서 감사 드리며 미안합니다. 나쁜 영어 Bishoy
+1 대부분의 내용에 동의합니다. * 브리지 테이블에 "합성 키"가 없어야합니다. * 대리 테이블에 자체 특성이 있거나 외부 키에서 참조되는 경우에만 대리 키가 필요합니다. 그리고 복합 키는 고유 한 키로 시행되어야합니다. – APC
@APC : ORM을 사용하려고한다면 대용 키가 필요합니다. 이 단계를 수행하면 복합 키는 불필요한 복잡성입니다. 성능을위한 색인을 작성하고 색인을 작성하십시오. –
대리 키는 관계형 무결성을 적용하지 않습니다. 유용한 장치이지만 단일 열 또는 다중 열에 상관없이 * 비즈니스 키 *를 적용해야합니다. 이제 많은 사람들이 데이터 무결성을 적용하는 응용 프로그램에 익숙하지만 나는 그 중 하나가 아닙니다. 질문자는 ORM이 아닌 데이터베이스 디자인에 대해 묻는 것 외에 내 관찰이 유효하다고 생각합니다. – APC