재밌고 어려운 IT를 이해해보자~!

sql 의문점 TEST 본문

개인공부

sql 의문점 TEST

언제나즐거운IT 2023. 12. 31. 21:37
CREATE TABLE BOARD(
	BOARDNUM INT PRIMARY KEY,
--	CATEGORY VARCHAR(100) NOT NULL,
	TITLE VARCHAR(100) NOT NULL,
	CONTENTS VARCHAR(500) NOT NULL,
	BOARDDATE DATE DEFAULT SYSDATE,
	MEMBERNUM INT,
    
	NICKNAME VARCHAR(100),
    GRADE VARCHAR(100),
--	PRICE INT,
--	PRODUCTCATEGORY VARCHAR(100),
--	COMPANY VARCHAR(100),
	--STATE CHAR(1)
	-- 조회수 추가 예정
	-- 이미지 추가 예정
	FOREIGN KEY (MEMBERNUM) REFERENCES MEMBER(MEMBERNUM)
);

의문이 생겼다!
보드테이블의 COLUMN 들이 원래는

BOARDNUM, TITLE, CONTENTS, BOARDDATE, MEMBERNUM 였다, 


하지만 다음과 같은 기능을 수행하기 위해서 멤버 테이블의 COLUMN인 NICKNAME과 GRADE를 
보드테이블에도 넣어줄 필요가 있었을까? INNER JOIN만으로는 안되는걸까 의문이든다!!

 

기능 설명
회원가입이 완료된 회원이 로그인을 하면,
글,댓글을 작성할수있다.
회원01,회원02가 있고
회원01이 글 1개,
회원02가 글 1개,
회원01이 댓글 2개,
회원02가 댓글 2개를 작성한후에
회원탈퇴를 하면
탈퇴한 회원의 글입니다.
탈퇴한 회원의 댓글입니다. 라고 출력되게끔해주세요!~~
만약 글을 삭제한다면?
글에 달려있던 댓글들도 함께 삭제되도록 해주세요!~~

MEMBERNUM, MEMBERNICKNAME, MEMBERGRADE, BOARDNUM. BOARDTITLE, BOARDCONTENTS를

한번에 보여주면 되기 때문에, SELECTONE 또는 SELECTALL 쿼리 문에 INNERJOIN으로 원하는걸 가져오면 되고,

보드테이블과 멤버테이블은 FK-PK 관계로 MEMBERNUM만 동일한 COLUMN으로 가지면 된다고 생각한다!!!!!!

nickname, grade, membernum은 MemberDTO, BoardDTO 에는 동일하게 존재해야한다!
그래야지만, BoardDTO에 nickname, grade, membernum을 set 해줄 수 있고

VIEW에서 전체출력을 위해 인자로 가져왔을때, 게시글 작성자의 nickname, grade, membernum을 BoardDTO로부터
받아 올 수 있기 때문이다!

결론 및 정리

SELECTALL의 쿼리문에서 MEMBERNUM을 KEY로 이용한 PK-FK 관계로 INNERJOIN을 통해 BOARD, MEMBER의 모든 COLUMN에 접근이 가능하고 

	private static final String SELECTALL = "SELECT BOARDNUM, TITLE, M.GRADE, M.NICKNAME FROM BOARD B INNER JOIN MEMBER M ON B.MEMBERNUM=M.MEMBERNUM ORDER BY B.BOARDNUM DESC";


BoardDTO에 멤버테이블 COLUMN 정보를 담을 공간이 존재 한다면 앞서 말했던 쿼리문으로 접근한 정보를 담아올 수 있다.

public class BoardDTO {
	private int boardNum;
	private String category;
	private String title;
	private String contents;
	private Date boardDate;
	private int price;
	private String productCategory;
	private String company;
	private String state;
	private int viewCount;
	private int memberNum;
	
	private String nickName;
	private String grade;
	
	
	public String getGrade() {
		return grade;
	}
	public void setGrade(String grade) {
		this.grade = grade;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;

 

 

	BoardDTO data = new BoardDTO();
				data.setBoardNum(rs.getInt("BOARDNUM"));
				data.setTitle(rs.getString("TITLE"));
				data.setGrade(rs.getString("GRADE"));
				data.setNickName(rs.getString("NICKNAME"));
				datas.add(data);

 

 

4줄요약-

보드테이블 멤버테이블을 INNERJOIN하고 

보드DTO에 멤버테이블 COLUMN을 담을 필드변수를 선언해 놓으면,

보드테이블에는 NICKNAME, GRADE 등등 멤버테이블 COLUMN값을 똑같이 생성하지 않아도 된다. 
(다만, PK-FK값인 MEMBERNUM은 양쪽에 있어야함 !!!!!!!!!!) 

'개인공부' 카테고리의 다른 글

프로젝트 관련 궁금증 정리  (0) 2024.02.22
Parameter(파라미터) 와 Attribute(속성) 의 차이  (0) 2024.01.27
JSTL practice  (0) 2024.01.26
BufferedReader, StringBuilder  (0) 2023.12.12
익명 객체(클래스), Comparator, sort  (0) 2023.12.10
Comments