Table 만들어보기

골머리·2021년 11월 3일
0

MySQL

목록 보기
3/16

인간에 대한 테이블을 만들어보자.
내가 생각하는 인간의 속성을 나열해본다.

  • 이름
  • 혈액형
  • MBTI
  • 생년월일
  • 직업
  • 좋아하는 음식

데이터 정제 : 정규화

각각의 독립적인 정보가 한 위치에 있도록 정규화를 해보자.

  • 여러사람이 동일한 이름, 혈액형 ... 등을 가질 수 있으므로 고유성을 보장하는 열이 없다 → Primary Key 설정이 필요하다.
  • 좋아하는 음식은 0개 또는 1개 이상의 항목을 포함하는 목록(enumeration)이다. → 별도 테이블을 만들고 Foreign Key로 연결하자.

스키마 문 생성 : CREATE TABLE

혈액형과 MBTI는 각각 4개의 값, 16개의 값만 허용하기 때문에 체크 제약조건을 해줬다.

blood_type CHAR(2) CHECK (blood_type IN ('A','B','O','AB')),

와 같이 해도 되지만, 테이블을 정의할 때 enum을 사용하여 표시했다.

터미널로 입력하다보니 한글자 틀려도 수정이 어려워서 DBeaver를 설치했다.
처음에 쿼리 실행했더니 no database selected 라는 에러가 떴는데, 빨강 네모 부분에서 데이터베이스를 반드시 선택해줘야한다.

desc person;

테이블이 잘 만들어졌는지 확인 😊

  • Null : 특정 필드의 데이터를 생략할 수 있는지를 나타낸다. (PK인 person_id 는 생략할 수 없다는 뜻)
  • Default : 특정 필드를 생략할 경우, 해당 필드를 기본값으로 채울지 여부를 나타낸다.

그럼 Foreign Key 로 연결할 favorite_food 테이블도 만들어보자.

CREATE TABLE favorite_food
	(person_id SMALLINT UNSIGNED,
	 food VARCHAR(20),
	 CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food),
	 CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id) REFERENCES person (person_id)
	);

여기서 PK와 FK의 제약조건을 거는 문법이 조금 헷갈렸다.
pk_fk_로 시작하는 이름이 테이블 어디에서도 볼 수 없었기 때문이다.

정리

1. PRIMARY KEY

CONSTRAINT 제약조건이름      	/*위의 코드에서 pk_favorite_food가 해당된다*/
	PRIMARY KEY (필드이름)

2. FOREIGN KEY

CONSTRAINT 제약조건이름		/*위의 코드에서 fk_fav_food_person_id가 해당된다*/
    FOREIGN KEY (필드이름)
    REFERENCES 테이블이름 (필드이름)

제약조건이름은 테이블에는 보이지 않지만 인덱스에서 보인다.
인덱스에 나열되어 있으면 헷갈리니, 일반적으로 pk_테이블명 혹은 fk_테이블명_pk 이런식으로 기억하기 쉽게 쓴다고 한다.

profile
PO로 성장하기 위해 노력 중 👩🏾‍💻

0개의 댓글