MySql DB 만들기
프론트하고 앱에 db가 필요하므로 db를 빠르게 설계해야 한다.
회원, 게시판, 일기장 db를 완성했다.
Oracle sql과 다르게 Mysql은 시퀀스 생성 방법이 달랐다.
쿼리를 만들고 저장하려고 했으나 에러가 발생했음

파일이 저장안돼서 직접 복붙으로. sql파일에 일단 넣어줬음..
erd를 mysql에서 확인해보자
댓글은 댓글 번호도 필요하지만 게시글 번호도 필요하다
프라이머리 키 하고 외부 키는 어떻게 설정할까?
댓글은 게시글의 내용을 알아야 하니깐 게시글을 쓴 writer을 포린 키로 가지고 있어야 하나?
FOREIGN 키를 설정할 때에는 참조되는 테이블의 필드가 반드시 UNIQUE나 PRIMARY KEY가 설정되어 있어야 한다.


이미 만들어진 테이블이 있으면 위에 코드를 이용해서 추가시켜줘야 한다.
제약조건(constraint)란?
1. NOT NULL
2. UNIQUE
3. PRIMARY KEY
4. FOREIGN KEY
5. DEFAULT
음.. 이렇게 하나하나 다쳐보니깐 또 만들기가 어렵다.
MySql의 Workbench를 이용하니깐 백 틱(`)을 이용해서 테이블명을 감싸는데

FK를 추가하려고 하니깐 안된다.. 왜 안되지?

테이블을 수정할 수 있는 것을 찾았다. 그리고 하단에 Foreign Keys가 있는데
이걸 사용해봐서 만들고 문법이 어느 부분이 틀렸는지 확인해본다!!
FK를 추가하기 전에 어느 곳에 FK를 넣어야 하는지 생각해보았다.
일단 댓글 번호에는 게시글 번호가 필요하니깐 FK로 설정해주고 아이디도 필요하니깐 FK로 아이디도 설정해준다.
이렇게 테이블마다 다른 테이블을 참조하고 있으면 그 키를 FK로 넣어주면 된다!

board_num에 넣으려고 해서 실패했음;_; 🤣PK인데 넣을려고 실수했음
board_writer에 넣어주니깐 잘 들어가는 것을 볼 수 있음.

일기장의 FK를 추가시켜주려고 했는데, on Delete 설정이 생각이 났다 CASCADE로 설정하면
아이디가 없으면 연쇄적으로 지워주는 것이 아닐까?
결론 회원이 삭제되면 작성자의 이름도 삭제되는 것이다.
회원 정보가 없어지면 댓글 단 회원의 아이디도 없어져야 하는 게 맞다.


같은 부모에 자식 테이블에 2개가 있으면 numbering을 해주는 것이다.
그러면 아까 적었던 fk도 수정해줘야 함.

member - 회원
board - 게시판
diary - 일기장
comm - 댓글
db코드는 길어서 접은 글로 하겠음
SHOW COLUMNS FROM `cando`.`member`
/*member에 now 추가했음 */;
ALTER TABLE `cando`.`member`
ADD COLUMN `member_indate` DATETIME NULL DEFAULT now() AFTER `member_phone`;
-- 회원 가입된 시간을 datetime으로 해서 현재시간 now를 이용
-- 멤버 테이블은 pk 아이디에만
/* -------------------게시판-------------------*/
CREATE TABLE `cando`.`board` (
`board_num` INT NOT NULL COMMENT '게시물 번호',
`board_title` VARCHAR(20) CHARACTER SET 'utf8' NOT NULL COMMENT '제목',
`board_writer` VARCHAR(45) CHARACTER SET 'utf8' NOT NULL COMMENT '작성자',
`board_writedate` DATETIME NOT NULL DEFAULT now() COMMENT '작성일자',
`board_updatedate` DATETIME NOT NULL DEFAULT now() COMMENT '수정일자',
`board_readcnt` INT NOT NULL DEFAULT 0 COMMENT '조회수\n',
PRIMARY KEY (`board_num`))
COMMENT = '게시판';
-- 게시판에 멤버 id 외부키 추가
-- board_writer member_id 참조
ALTER TABLE `cando`.`board`
DROP FOREIGN KEY `board_writer`;
ALTER TABLE `cando`.`board`
ADD CONSTRAINT `board_writer`
FOREIGN KEY (`board_writer`)
REFERENCES `cando`.`member` (`member_id`)
ON DELETE CASCADE;
/* -------------------일기장-------------------*/
CREATE TABLE `cando`.`diary` (
`diary_num` INT NOT NULL COMMENT '일기 번호',
`diary_title` VARCHAR(20) CHARACTER SET 'utf8' NOT NULL COMMENT '제목',
`diary_content` VARCHAR(2000) CHARACTER SET 'utf8' NOT NULL COMMENT '일기 내용',
`diary_writer` VARCHAR(45) CHARACTER SET 'utf8' NOT NULL COMMENT '작성자',
`diary_writedate` DATETIME NOT NULL DEFAULT now() COMMENT '작성일자',
`diary_updatedate` DATETIME NOT NULL DEFAULT now() COMMENT '수정일자',
PRIMARY KEY (`diary_num`))
COMMENT = '일기장';
-- 일기장 작성자 추가
ALTER TABLE `cando`.`diary`
CHANGE COLUMN `diary_writer` `diary_writer` VARCHAR(20) CHARACTER SET 'utf8' NOT NULL COMMENT '작성자' ;
-- 일기장 작성자 폴인키 추가
ALTER TABLE `cando`.`diary`
ADD CONSTRAINT `diary_writer`
FOREIGN KEY (`diary_writer`)
REFERENCES `cando`.`member` (`member_id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;
/* -------------------댓글-------------------*/
CREATE TABLE `cando`.`comm` (
`comm_num` INT NOT NULL DEFAULT 0 COMMENT '댓글 번호\n0번 부터',
`comm_writer` VARCHAR(20) CHARACTER SET 'utf8' NOT NULL COMMENT '댓글 쓴사람\nmember_id 참조하고 있음.',
`board_num` INT NOT NULL COMMENT '게시물의 번호를 참조\nboard_num을 참조하고 있음.\n',
`comm_content` VARCHAR(200) CHARACTER SET 'utf8' NULL COMMENT '댓글 200자 까지 입력가능\n댓글 번호가 많아지면 1,2페이지로 나눠야 함.\n',
`comm_writedate` DATETIME NOT NULL COMMENT '댓글 작성한 날짜',
`comm_updatedate` DATETIME NOT NULL COMMENT '댓글 수정한 날짜',
PRIMARY KEY (`comm_num`),
INDEX `member_id_3_idx` (`comm_writer` ASC) VISIBLE,
INDEX `board_num_1_idx` (`board_num` ASC) VISIBLE,
CONSTRAINT `member_id_3`
FOREIGN KEY (`comm_writer`)
REFERENCES `cando`.`member` (`member_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `board_num_1`
FOREIGN KEY (`board_num`)
REFERENCES `cando`.`board` (`board_num`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COMMENT = '댓글';
mysql에서 erd 만들어주는 방법을 이용한다

[mySQL] mySQL ERD생성하기, ERD자동 생성
이번엔 mySQL에서 만들 테이블들간의 관계도를 생성해주는 방법을 소개할까한다.. ERD(Entity Relationship Diagram): 개체-관계 다이어그램 (테이블 간의 관계를 도식화했다고 생각하면 될 듯) 1. ERD를 만
xively.tistory.com
export로 파일을 꺼내 주면 됨.

한글로 옆에 해석까지 적었다.
사용자가 보기 쉽게!
'포트폴리오 기록' 카테고리의 다른 글
| AWS : 스프링 부트를 이용해서 서버 만들기 (0) | 2021.09.13 |
|---|---|
| AWS (Amazon Web Service) : 서버만들기,실행하기,EC2 (0) | 2021.09.01 |
| 2021-08-30 Cando 포트폴리오 day4 (0) | 2021.08.30 |
| MySQL : 스키마,테이블 만드는 방법, 테이블 엔진 종류 , db설계 방법 (0) | 2021.08.24 |
| 2021-08-23 Cando 포트폴리오 시작! (0) | 2021.08.23 |







