학교수업

0315 데이터베이스

Ynghan 2023. 3. 15. 17:37

` : back tick(백틱)

  • 우리가 이름 지어줄 경우 사용할 수 있다.

이미 있는 데이터베이스를 생성(create)할 경우 에러를 발생시킨다.

그렇기 때문에 없을 경우에만 만들어라 라는 명령어를 사용하고 싶다.

CREATE DATABASE IF NOT EXISTS songdb

전세계 모든 언어로 표현 가능

DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

데이터베이스에도 써주고 테이블에도 써준다.

SHOW DATABASES;

좀 전에 만든 songdb를 사용하겠다.

song 테이블을 만들겠다.

CREATE TABLE song (
  id INT NOT NULL AUTO_INCREMENT;
  title VARCHAR(255),
  singer VARCHAR(100),
  lyrics TEXT NULL, # 주석
  PRIMARY KEY(id)
) ENGINE = INNODB
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

AUTO_INCREAMENT : NULL을 집어넣으면 알아서 증가시키면서 값을 넣어 줌.
# : 주석
PRIMARY_KEY(id)
ENGINE : INNODB로 지정해야 함.

데이터베이스는 후보가 되는것이 굉장히 중요하다.
현실세계와 다름. 후보되기가 힘들다.

유일하게 접근할 수 있는 것.

우리 학교의 DBA라면 일반적으로 후보키를 학번으로 고를 것이다. 유니크를 만족해야한다.

만족하는 것들은 후보키가 되고 후보키 중에 아무거나 사용해도 상관없다.

BLOB

  1. 그냥 이미지 블록으로 집어넣을지
  2. 주소를 참조시킬 것인지

정리

DROP DATABASE IF EXISTS songdb;

CREATE DATABASE songdb
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
  
SHOW DATABASES;

CREATE TABLE song (
  id INT NOT NULL AUTO_INCREMENT;
  title VARCHAR(255),
  singer VARCHAR(100),
  lyrics TEXT NULL, # 주석
  PRIMARY KEY(id)
) ENGINE = INNODB
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

 

변경할 때는 ALTER를 사용한다.

 

질문

: 지금은 한 테이블에 노래를 쫙 넣음. 이것을 프로그래밍할 경우 듣고 싶은 노래를 뜨도록 하고 싶은 경우. 어떻게 하면 될까?

best case

 

worst case

1. 애창곡 테이블을 만들고 프로그래밍 시 들을 테이블을 만들어.

2. 노래 테이블에다가 column을 추가한다. 1번이면 애창곡, 2번이면 프로그래밍 노래

 

RDB는 너무 엄격해서 나온게 NOSQL(ex. MONGODB)

에플리케이션마다 다르지만 NOSQL이 퍼포먼스가 더 좋은 경우가 있다.

앞으로는 데이터관리는 RDB, 이걸 서비스할 경우는 NOSQL이 좋을 수 있다.

RDB는 안전적인 구조. 일관성을 높이고, 중복을 없애고 이러다 보니 NOSQL을 요구하게 된다.
왜냐하면 퍼포먼스가 안나오는 경우가 있기 때문이다.

 song

  1. ditto
  2. hypeboy
  3. dynamite

playlist

  1. 애창곡
  2. 프로그래밍 리스트

song 과 playlist의 관계를 형성시켜주는 것이 정규화이다.

그 관계를 list song이라고 함

 

in time과 on time의 차이점

그 시간 안에 / 정확히 그 때

테이블을 지울땐 DROP

데이터베이스를 지울 땐 DELETE

ON DELETE : 가리키고 있는 테이블이 삭제되면? 어떻게 처리할 것인지 정하는 명령어

CASCADE : 연쇄반응이라는 의미

  1. 어느 게시글의 댓글은 게시글이 지워지면 삭제된다.
  2. 어느 게시글의 댓글이 달려있다면 못 지우도록 만들 수도 있다.
  3. 댓글에 참조를 NULL로 바꿔준다.

어떻게 만들지는 DBA가 정하다.

PRIMARY KEY에는 NULL이 들어갈 수 없다. 그래서 3번은 불가능하다.

ID 자체가 바뀐다면 쫓아가서 바꿔야한다. : ON UPDATE

최종

DROP DATABASE IF EXISTS songdb

CREATE DATABASE songdb
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
  
SHOW DATABASES;

CREATE TABLE song (
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(255),
  singer VARCHAR(100),
  lyrics TEXT NULL, # 주석
  PRIMARY KEY(id)
) ENGINE = INNODB
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
  
  SHOW TABLES;
  DESC song;
  
  ALTER TABLE song ADD rating INT;
  DESC song;
  
  ALTER TABLE song MODIFY COLUMN title VARCHAR(255) NOT NULL;
  DESC song;
  
  CREATE TABLE playlist (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255),
    PRIMARY KEY(id)
  ) ENGINE = INNODB
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
  
  
  CREATE TABLE listsong (
    listid INT NOT NULL,
    songid INT NOT NULL,
    PRIMARY KEY(listid, songid),
    FOREIGN KEY(listid) REFERENCES playlist(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
        FOREIGN KEY(songid) REFERENCES song(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
    INDEX(listid)
  ) ENGINE = INNODB
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
  
SHOW TABLES;

'학교수업' 카테고리의 다른 글

창업 마케팅 기말 정리  (1) 2023.12.20
pwm  (0) 2023.10.18