SQL
ERD:관계
docc
2021. 7. 25. 12:58
ERD
Mysql Workbench -> File -> New Model -> Physical Schemas 에 오른쪽 + 클릭 ->
Schema 즉, DB이름 : board4
-> 만들고 상단에 EER 모델(ERD:데이터베이스 설계) 새로 만들기 = Entity 간의 관계를 나타내는 모델
table = Entity = 개체
Member(회원) - board(게시물) 의 관계를 게시물번호로 Member(회원)FK - board(게시물)PK 로 하면 안된다. | ||
회원이 게시물하나 쓸 때 게시물에서는 새 튜플이 나오지만 회원도 그 번호와 같은 Member튜플을 만들어야 한다. 그러면 똑같은 회원정보 튜플이 계속 늘어난다. 그래서 반대로 하면된다. |
||
Member(회원) - board(게시물) 의 관계를 회원번호로 board(게시물)FK - Member(회원)PK 로 하면 된다. | ||
게시물에 회원의 번호가 있는 상태로 새 튜플이 나오면 회원은 튜플을 따로 만들지 않아도 연결된다. 그래서 회원은 독립적인 개체이며 게시물은 종속적인 개체인 것이다. |
이제 관계의 조건 2가지를 알아야 한다.
1. 다수성 : 1 대 1 , 1 대 n
회원 개체에 게시물 개체가 다수이니 1 대 n 관계다.
2. 선택 : 선택, 필수(선에 O)
회원 개체가 꼭 게시물 개체와 관계를 가지지 않아도 된다. 선택관계다.(게시물작성을 안 할 수도 있으니)
3. 식별 : 식별 - 1 대 1 관계일 때만 가능 , 비식별
식별 = FK 인 행을 PK키로도 사용(격상이라고부름)
StarUML
들어가서 다운받기 // ERD 미리 설계해보는 간단한 프로그램
https://www.visual-paradigm.com/
이 툴도 아주 좋으나 시간관계상 패스
File - > New From Template - > UML Conventional 생성
여기서 "수단 & 목표 분석" 을 하는 것이다.
1. Use Case Model = 사용자 요구분석 | ||
2. Analysis Model = 시스템 목표 분석 | ||
3. Design Model = 설계 | ||
4. Implementation Model = 구현 | ||
5. Deployment Model = 배치 |
Design Model ( 설계 단계 ) : 타프로그램은 여기서 설계하면 eclipse 와 연동되어 실시간으로 class가 만들어진다 | ||
1-1. Design Model 에 오른쪽 마우스 -> add -> package 로 membermanage, boardmanage 를 만든다. | ||
1-2. 왼쪽 하단에 Dependecy 로 boardmanage 가 membermanage를 의존하는 테이블로 연결 | ||
2-1. membermanage 오른쪽 마우스 -> add Diagram -> Class Diagram 을 만들어 여기에서 Class 설계 | ||
2-2. membermanage 오른쪽 마우스 -> add -> class 2개 만들기 -> 이름 : Member , MemberDAO | ||
2-3. Member 이름칸 더블클릭해놓으면 오른쪽 첫번째 add Attribute : ERD 참고해 java 형으로 만들기(오른쪽 + 기호누르면서) -> -no: int -name: String 이름 앞 ' - ' 는 private, ' + ' 는 public (옆에 돋보기+ 누르면 설명나옴) |
||
2-4. Member 오른쪽마우스 add -> Operation(getter,setter 메서드 추가) : java 형이지만 쓰는 형식은 SQL이다 (변수명 변수타입) |
||
3-1. boardmanage 에도 똑같이 classdiagram에 BoardDAO, Board 클래스 추가 | ||
3-2. Board누르고 우측하단에 Properties - > stereotype : VO 입력 | ||
3-3. Board 도 ERD 참고해 java 형으로 만들되 Member class도 꺼내서 참조관계 Directed Association 으로 Member을 참조하게 한 후 그 참조 값을 -writer 로 선언 (class Board 가 private Member 를 writer로 참조한다는 뜻) writer: 참조명 or 역할명(rolename) |
||
자세한건 파일로 저장했으니 참고. |
>> boardmanage.Board ( membermanage.Member 를 참조하였고 역할명은 writer 이다.)
package com.stone.board_member.boardmanage;
import java.sql.Date;
import com.stone.board_member.membermanage.Member;
public class Board {
// 일반속성 = 원시속성
private int no;
private String title;
private String contents;
private Date wdate;
private long views;
// 참조속성
private Member writer;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Date getWdate() {
return wdate;
}
public void setWdate(Date wdate) {
this.wdate = wdate;
}
public long getViews() {
return views;
}
public void setViews(long views) {
this.views = views;
}
public Member getWriter() {
return writer;
}
public void setWriter(Member writer) {
this.writer = writer;
}
}