눈덩이의 테크블로그
[6_2] erd cloud를 이용하여 로그인, 회원가입, 게시물, 댓글 테이블 짜기(mysql,putty) 본문
CREATE TABLE `account` (
`account_id` INT(12) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(20) NOT NULL,
`user_id` VARCHAR(20) NOT NULL,
`password` VARCHAR(20) NOT NULL,
`email` VARCHAR(24) NOT NULL UNIQUE,
`phonenumber` INT(14) NOT NULL UNIQUE,
`account_created_date` DATETIME NOT NULL,
PRIMARY KEY (account_id)
);
CREATE TABLE `post` (
`post_id` INT(12) NOT NULL AUTO_INCREMENT,
`account_id` INT(12) NOT NULL,
`post_title` VARCHAR(100) NOT NULL,
`post_created_date` DATETIME NOT NULL,
`modified_date` DATETIME NULL,
`post_content` VARCHAR(1000) NOT NULL,
PRIMARY KEY (post_id),
FOREIGN KEY (account_id) REFERENCES `account` (`account_id`)
);
CREATE TABLE `comment` (
`comment_id` INT(12) NOT NULL AUTO_INCREMENT,
`post_id` INT(12) NOT NULL,
`account_id` INT(12) NOT NULL,
`comment_created_date` DATETIME NOT NULL,
`comment_modified_date` DATETIME NULL,
`comment_content` VARCHAR(500) NOT NULL,
PRIMARY KEY (comment_id),
FOREIGN KEY (account_id) REFERENCES `account` (`account_id`),
FOREIGN KEY (post_id) REFERENCES `post` (`post_id`)
);
6주차 수업 때의 과제
- database설계 해오기 (기능을 불러드리겠습니다 테이블 만들어오셈)
1. 로그인
2. 회원가입
3. 아이디찾기, 비밀번호 보기
4. 내정보 보기
5. 내정보 수정
6. 회원탈퇴기능
7. 게시글 읽기 쓰기 수정 삭제
8. 댓글 읽기 쓰기 수정 삭제
이 과제를 해오려면 이것들을 알아야한다고 하더라.
Primary Key (기본 키) : 기본키는 객체을 고유하게 식별해주는 id이다.
기본 키는 데이터베이스 테이블의 각 행(레코드)을 고유하게 식별하는 열(필드)입니다.
주로 정수 또는 문자열 형태로 사용되며, 중복되지 않고 모든 행에 대해 유일해야 합니다.
기본 키는 해당 테이블의 주요 식별자로 사용되며 다른 테이블과의 관계를 설정할 때 사용됩니다.
Foreign Key (외래 키) : 외래 키는 하나의 테이블에서 다른 테이블과의 관계를 설정하는 데 사용되는 열이다.
이 열은 다른 테이블의 기본 키를 참조하거나, 다른 고유한 값과 연결됩니다.
Auto Increment (자동 증가) : 자동 증가는 데이터베이스에서 사용되는 숫자 열에 대한 속성으로, 일반적으로 기본 키로 사용됩니다. 이 열은 새로운 행이 삽입될 때마다 자동으로 증가하며, 고유한 값을 생성합니다. 자동 증가 열은 데이터베이스가 신규 레코드에 대해 고유한 키를 생성하고 관리하는 데 사용됩니다. 자동 증가 값을 가지는 컬럼으로 값을 직접 대입할 수 없습니다. 중간에 값을 삭제한다고 해서, 삭제된 값을 재사용하지 않으며 레코드가 적재될 때마다 1씩 증가하게 됩니다.
참고영상
https://youtu.be/oHaNx5cWuxM?si=hxXrRSS4R-a-HW_T
우선 putty로 SQL을 좀 만들었는데 FOREIGN KEY와 부모자식 관계 등등 보기 불편해서 erd cloud를 이용하게 되었다.
putty에 적었던 코드는 아래와 같다.
1.계정 정보 테이블 생성
CREATE TABLE account (
account_id INT(12) NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
user_id VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
email VARCHAR(24),
phonenumber INT(14) NOT NULL,
account_created_date DATETIME NOT NULL,
PRIMARY KEY(account_id));
2.게시물 정보 테이블 생성
CREATE TABLE post (
post_id INT(12) NOT NULL AUTO_INCREMENT,
account_id INT(12) NOT NULL,
post_title VARCHAR(100) NOT NULL,
post_created_date DATETIME NOT NULL,
post_modified_date DATETIME NULL,
post_content VARCHAR(1000) NOT NULL,
PRIMARY KEY(post_id),
FOREIGN KEY(account_id) REFERENCES account(account_id));
3. 댓글 정보 테이블 생성
CREATE TABLE comment(
comment_id INT(12) NOT NULL AUTO_INCREMENT,
post_id INT(12) NOT NULL,
account_id INT(12) NOT NULL,
comment_created_date DATETIME NOT NULL,
comment_modified_date DATETIME NULL,
comment_content VARCHAR(500) NOT NULL,
PRIMARY KEY(comment_id),
FOREIGN KEY(post_id) REFERENCES post(post_id),
FOREIGN KEY(account_id) REFERENCES account(account_id));
ERD cloud에서 만든 테이블
여기서 관계 구분선을 추가해 줘야한다.
선의 종류는 두가지가 있다.
-
실선(Identifying): 식별관계
-
점선(Non-Identifying): 비식별관계
- 부모테이블의 PK가 자식테이블의 일반속성(PK가 아닌 속성)이 되는 경우
근데 식별관계는 잘 안쓴다고 한다^^.
여기테이블에선 account테이블이 부모가 되고 post, comment 테이블이 자식이 되는 것이다.
부모자식 관계란
부모가 참조당하는(?) 소스로 쓰이는 대상이고 자식이 참조를 해오는 대상이다.
예를 들어 부모(계정 정보) - 자식 (게시글정보)
챗지피티한테 물어보니깐
부모-자식 관계는 주로 테이블 간의 관계를 설명하는 개념입니다. 부모 테이블과 자식 테이블 사이의 관계를 나타내며, 특히 외래 키(Foreign Key)를 통해 구현됩니다. 일반적으로 한 테이블의 기본 키(주 키)를 다른 테이블의 외래 키로 참조하여 관련 정보를 연결합니다. 이 관계는 일반적으로 일 대 다 또는 일대일 관계를 나타낼 수 있습니다. 예를 들어, 하나의 주문 주문(부모)에 여러 개의 주문 상품(자식)이 연결됩니다.
일대다 관계는 두 테이블 간의 행(row) 수 관점에서 설명됩니다. 한 쪽의 엔터티(테이블)의 하나의 행이 다른 쪽 엔터티의 여러 행과 관련되는 경우를 나타냅니다. 이 관계에서 한 행은 다른 쪽의 여러 행과 연결될 수 있습니다. 예를 들어, 하나의 고객(한 쪽)은 여러 개의 주문(다른 쪽)을 생성할 수 있습니다. 이것은 주로 데이터 행의 관계를 설명하는 것이며, 부모-자식 관계는 이러한 관계를 구현하는 한 가지 방법입니다.
요약하면, 부모-자식 관계는 테이블 간의 관계를 설명하고 데이터 무결성을 유지하는 데 사용되는 개념이며, 이 관계는 일대다 또는 일대일 관계를 포함할 수 있습니다. 반면 일대다 관계는 두 테이블의 행(row) 간의 관계를 설명하는 것이며, 한 쪽 엔터티(테이블)의 하나의 행이 다른 쪽 엔터티(테이블)의 여러 행과 관련되는 경우를 나타냅니다.
이렇단다. 아직 겁나 헷갈림 ㅠ 점점하다보면 알겠지..?
암튼 이렇게 만들었다.
결과물 : 일단 이렇게 됐는데 잘 만든거죵?
'TIL' 카테고리의 다른 글
[Database] 트랜잭션(Transaction) (0) | 2023.10.25 |
---|---|
[6_4] sql 문법 공부하기 (N+1 problem / join /sub query) (1) | 2023.10.22 |
[6_3] 로그인, 비밀번호/아이디 찾기, 게시판 html, css 꾸미기 (0) | 2023.10.22 |
[6_1] 프로토콜, 데이터베이스란?(파일질라, ftp-simple), sql 쿼리문 (0) | 2023.10.18 |
[5] AWS로 서버 구축&배포하기 (putty) (5) | 2023.10.18 |