Page History
...
데이터베이스의 관계 형성과 유사한 효과를 내려고 합니다. 그 목적을 달성하기위해 테이블과 클래스의 몇가지 차이점을 알아야합니다.
Class VS Table
Class | Table |
---|---|
Class GroupInfo{ string name; } Class User{ GroupInfo groupInfo; string name; string email; } Class GroupInfoNew{ string name; List<User> userList; } | GroupInfo User |
- Class : 포함되는 객체는, 자신을 포함하는 객체 찾기가 어려우며,주인객체로 단방향접근이 일반적입니다. ( User → GroupInfo )
- Table : 테이블은 자유로운 결합이 가능하며 연관관계 아이디를 통해 양방향접근이 가능합니다. ( User ↔ GroupInfo )
- Class : 클래스는 객체자체를 리스트화하여 가질수 있습니다.
- Table : 테이블은 리스트형태의 데이터자체를 포함하는것은 불가능하며, 일대다 관계가 형성된 테이블을 통해 논리적 구성을 하여야합니다.
...
- 식별 관계는 부모 테이블의 기본 키를 자식 테이블로 전파하면서 자식 테이블의 기본 키 컬럼이 점점 늘어난다. 그러면 조인할 때 SQL이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다.
- 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다.
- 식별 관계를 사용할 때 기본 키로 비지니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다. 반면에 비식별관계의 기본 키는 비지니스와 전혀 관계없는 대리 키를 주로 사용한다.
- 언제든지 요구사항은 변한다. 식별 관계의 자연 키 컬럼들이 자식에 손자까지 전파되면 변경하기 힘들다.
- 식별 관계는 부모 테이블의 기본 키를 자식 테이블의 기본 키로 사용하므로 비식별 관계보다 테이블 구조가 유연하지 못하다.
어느 한가지가 항상 유리한것은 아니기때문에, 키 전파가 되는것에 따라 이러한 차이가 있다라고 알우둡니다.
Info |
---|
이후 샘플은 비식별관계만 이용하여, JPA 연관특성을 살펴 보겠습니다. |
...
Code Block | ||||
---|---|---|---|---|
| ||||
-- 그룹을 추가한다.
INSERT INTO test.group_info(
group_id
,name
) VALUES (
NULL -- group_id - IN int(11)
,'' -- name - IN varchar(255)
)
-- 사용자를 추가할시 그룹을 지정하거나, 나중에 지정한다. group id가 현재는 null 허용
INSERT INTO test.user(
user_id
,email
,name
,group_id
) VALUES (
NULL -- user_id - IN int(11)
,'' -- email - IN varchar(255)
,'' -- name - IN varchar(255)
,0 -- group_id - IN int(11)
)
-- 여러명을 등록할시 위 과정이 반복됩니다.
--학생인 사용자만 조회시..Join을 통해 해결
select * from user left outter join group_info gi on gi.name='학생' |
...