자바 개발자로, iOS 개발자로...

사실 DB는 대충 아무생각없이 간단한 테이블들이나 만들고 단순한 쿼리정도 짤줄 알았지...


이번에 개인 프로젝트로 시스템 하나 만들면서 나름 생각 있는 scheme를 짜보기로 했다.


대충 머리에 떠오르는대로 entity 구성은 했는데

이놈에 관계란...

어떤 놈을 어떤 놈과 연결지어야 하는지는 알겠는데...

뭔놈의 관계 맺는데 옵션이 이렇게 많냐...


오늘 배운 2가지만 정리해보자


Identifying Relationship


외형상의 특징은 부모 테이블의 PK가 자식 테이블의 PK로 들어간다.

여기서부터 유추할 수도 있겠지만 만일 부모 테이블에 없는 PK로 자식 테이블에 레코드를 생성할 경우

당연히 생성이 되지않는다. 만일 이미 자식 테이블에 PK로 포함된 부모 테이블의 레코드가 삭제되면

(이게 가능한지는 모르겠지만) 당연히 자식 테이블이 이 레코드는 참조가 되질 않을 것이다.


ERD에서는 실선으로 표시를 한다.


Non-Identifying Relationship


외형상의 특징은 부모 테이블의 PK가 자식 테이블의 일반 컬럼으로 들어간다

때문에 부모 테이블에 해당 PK가 없어도 자식 테이블의 레코드는 그 자체로 존재 가능하다.


ERD에서는 점선으로 표시한다.



그림으로 보면




다음은 Mandatory와 Optional


Mandatory


외형상으로는 FK가 항상 Not Null이어야 하는 경우. 즉 항상 관계가 유지되어야 하는 경우


Optional


외형상으로는 FK가 Null이어도 되는 경우. 즉, 관계가 맺어지지 않아도 됨



뭔가 설명이 부실하지만...

차차 공부하면서 익숙해지도록 하자...ㅠ.ㅠ


'Development > DATABASE' 카테고리의 다른 글

RDBMS 개념 정리 - Relationshp  (0) 2015.04.24
블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2012/04/09 16:04 


현재 사용 중인 Xcode 버전이 4.3인데 바뀐 Xcode로 작업을 하려니

삽질이 이만 저만이 아니다.
대부분 아주 간단한 것인데 애플의 문서를 샅샅이 살펴보지 않는 한은
쉽게 발견하기 힘든 것들이기도 하다.

오늘은 Entity간의 Relationship에 대한 이야기다.

일단 Entity간의 구조는 이렇다.




보는대로 이메일과 첨부파일을 관리할 Entity이다.
당연히 EmailData와 AttachFiles의 관계는 1:N이다.

이 것이 Insert시에는 EmailData의 attachFiles에 NSSet 형태로 집어넣고

[emailData.managedObjectContext save:&error]만 해주면 첨부파일들이

자동으로 AttachFiles에 저장이 된다.


그런데 삭제시에는 요상하게 EmailData만 삭제가 되고 AttachFiles의 관련

데이터들은 삭제가 안될뿐더러 emailData 값이 NULL로 바뀌는 것이다.


이거 일단 emailData를 지우고 나중에 AttachFiles에서 emailData가 NULL인

놈들만 따로 지워야 하나...하고 고민하다가 결국엔 답을 찾았다.


아주 간단한 답을...-.-


일단 부모가 되는 EmailData의 Relationship인 attachFiles는

오른쪽 설정창에서 Delete Rule을 Cascade로 해준다.





그리고 자식에 해당하는 AttachFiles의 Relationship인 mailData는
Delete Rule을 Nullify로 해준다.




요렇게 하니 깔끔하게 처리된다~

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^