Page History
...
데이터베이스의 관계 형성과 유사한 효과를 내려고 합니다. 그 목적을 달성하기위해 데이터베이스의 테이블과 객체지향의 클래스의 몇가지 차이점을 알아야합니다.
...
Class VS Table
DB
OOP 3개의 속성으로 구성된 튜플
address
Class |
---|
속성명:정의 |
---|
ID:integer |
name:text |
address:text |
class User{
int udTable |
---|
Class GroupInfo{ string name; } Class User{ GroupInfo groupInfo; string name; string |
email; } |
-- Todo 정리중
Class VS Table
...
class User{
int id; // 특별한 구현없이, 사용자의 객체만으로 자신을 포함하는 특정정보(클릭로그)만 추출할수가 없습니다.
string name;
string email;
}
class ClickLog{
int clickid;
User user; // User객체 참조를 포함합니다.
string clickurl;
}
...
Class GroupInfoNew{ string name; List<User> userList; } | GroupInfo User |
- Class : 포함되는 객체는, 자신을 포함하는 객체 찾기가 어려우며,주인객체로 단방향접근이 일반적입니다. ( User → GroupInfo )
- Table : 테이블은 자유로운 결합이 가능하며 연관관계 아이디를 통해 양방향접근이 가능합니다. ( User ↔ GroupInfo )
- Class : 클래스는 객체자체를 리스트화하여 가질수 있습니다.
- Table : 테이블은 리스트형태의 데이터자체를 포함하는것은 불가능하며, 일대다 관계가 형성된 테이블을 통해 논리적 구성을 하여야합니다
...
Code Block | ||||
---|---|---|---|---|
| ||||
TABLE User{
int id //자신의 키를 참조하는 다른 테이블에 접근가능합니다. on u.id = c.clickid
varchar name
varchar email
}
TABLE ClickLog{
int clickid
int userid //외래키를 통해서 접근가능합니다. on c.clickid = u.id
varchar clickurl;
} |
- 프로그래밍모델에서 객체는 일반적으로 상속또는 포함관계를 통해 단방향 접근이 일반적입니다.. ( ClickLog→ User )
- 데이터 베이스는 연관관계와는 별개로, 양방향 접근에 자유롭습니다. ( User ↔ ClickLog )
- 프로그래밍 모델에서는 상속의 개념이 존재하여 다양한 객체를 포함할수가있습니다. 데이터베이스 에서는 상속개념이 없으며 리스트와같은 데이터Type을 포함할수 없습니다.
- 데이터베이스에서는 상속의 개념을, 외래키를 통해 관계형성을 하며 논리적인 관계를 형성할수가 있습니다.
이와같은 차이를 극복하고, 데이터베이스의 Table을 객체지향적 인 모델로 변경을하여 사용하려면
JPA에서 지원하는 관계Class(Relation)을 형성(Join)하는 OOP)에 데이터베이스의 관계도(Relation)를 형성하는 몇가지 키워드의 의미를 알아야합니다.
아래 키워드는 OOP가 가진 특성을 잃지않고 OOP가 가진 한계를 관계형 DB처럼 , 관계형 DB의 속성을 확장을 해줍니다.
- ManyToOne : 다대일 관계 매칭정보
- JoinColumn : 외래키를 매핑때 사용함
- mappedBy : 연관관계설정시 주인이 아님을 설정
- OneToMany : 일대다 관계 매핑정보
- OneToOne : 일대일 관계 매칭정보, 어느곳이나 외래키를 가짐
- ManyToMany : 다대다 관계매칭정보, 맵핑테이블을 만들어서 사용하기를 권장
- 연관관계주인 : 외래키가 있는곳이 주인이며 주인만이 수정가능 아닌경우 조회만가능
...