Open skarltjr opened 1 year ago
고민해볼 문제
1. 물리적인 fk를 설정하지 않았을 때라면 연관된 객체를 할당하지 않아도 insert가 된다는거아닌가?
애플리케이션단에서 처리 및 검증 로직이 필요할거같다
joinColumn의 nullable을 통해 검증할 수 있다고 생각
그런데 이건 정합성 안맞는경우 서버가 종료되니 위험하다
애플리케이션단에서 검증을 통해 예를들어 member객체 생성 전 team id로 team조회 후 존재할때만 member 생성하게하는 검증 로직을 추가한다.
결국에 fk를 활용해서 편리했던만큼 fk를 사용하지 않을땐 정합성 강제를 피할 수 있는만큼 이에 대응하게 꼼꼼하게 설계가 필요한거같다
개요:
정합성을 강제하는건 좋은것인가?
학생과 성적은 연관관계라고했을때 만약 학생이 졸업한다면? 학생이 사라지면? 성적도사라지는데 졸업하고 성적증명서 뽑아야한다면?
fk의 경우 on delete가 기본이라고한다. on delete 설정은 다음과 같은 종류가 있다
예를들어 cascade를 설정한다면 학생을 지웠더니 성적 정보도 같이 사라지게될 수 있다. 만약 fk를 올바르게 인지하지 못하고 사용한다면 위 경우 참사가 발생할것
그러니까.. 주의해야할건 우리가 앞으로 어떤게 필요하고 / 어떤게 필요하지 않을지 쉽게 예상하지 못한다. 결국 "확장 가능 여부"를 고려했을때 무작정 fk 사용은 위험할 수 있다고 생각한다.
다음으로 연관관계가 맺어진 부모 - 자식 테이블이 존재한다고 해보자 부모 테이블 구조를 변경해야하는데 fk가 걸린경우 이게 쉬운가? 부모 테이블 구조 변경으로 인한 영향력을 쉽게 판단할 수 있을까?
분명히 fk의 on delete cascade 처럼 정합성을 위해 연관된 데이터까지 알아서 제거해주는건 정말 효과적이지만 효과적인건 항상 위험이 존재하는것같다.