관계형 데이터베이스

image

위의 table에서 데이터가 중복되는 부분이 있다. -> 개선의 여지가 있다.
만약, 중복된 데이터의 수정이 필요한 상황이라면 현재의 상태에서는 모든 데이터를 수정해야할 것이다.

  1. 중복되는 데이터를 가진 author와 profile을 새로운 author라는 table을 새로 만들어보자.
    image

  2. 기존의 table에서 author와 profile을 빼고, author_id라는 칼럼으로 대체 + author table의 id값을 대체하자.
    image

  3. 이제 author테이블 값만 바꾸면 -> topic 테이블의 모든 author_id는 자동으로 변경된 내용이 관계될 것이다.
    유지보수가 훨씬 편해진다.
    image


중복을 제거하여 별도의 테이블을 만들고 참조값만 적어주면, 유지/보수의 장점이 생긴다.

하지만, 직관적이지 못한, 별도의 테이블도 열어봐야하는 단점도 생긴다.

그래서 필요한 것이  별도의 테이블로 중복을 방지하여, 유지보수를 편하게 + 볼때는, 하나의 table로 합쳐진 형태의 직관적으로 만들어야하는데, 이것을 관계형 데이터베이스이고 저장할때는 별도로 + 보여줄때는 합쳐서를 실현해보자.
image


기존 테이블 2개로 분리하기

  1. 기존의 테이블의 이름 바꿔서 백업하기
    RENAME TABLE topic TO topic_backup;
    image

  2. author+profile을 author_id로 참조하는 형태의 새로운 테이블 만들기
    mysql> CREATE TABLE topic(
         -> id INT(11) NOT NULL AUTO_INCREMENT,
         -> title VARCHAR(30) NOT NULL,
         -> description TEXT NULL,
         -> created DATETIME NOT NULL,
         -> author_id INT(11) NULL,
         -> PRIMARY KEY(id)
         -> );
    image

  3. author 테이블 새로 만들기
    mysql> CREATE TABLE author(
         -> id INT(11) NOT NULL AUTO_INCREMENT,
         -> name VARCHAR(20) NOT NULL,
         -> profile VARCHAR(200) NULL,
         -> PRIMARY KEY (id)
         -> );
    image

  4. author 테이블을 기존 백업한 테이블을 보며 데이터 입력하기
    INSERT INTO author ( ) VALUES( );
    - *id값은 칼럼괄호에 안넣으면 자동으로 1씩 증가하지만, 여기에선 직접 증가한다.
    mysql> INSERT INTO author (id, name, profile) VALUES(1, 'egoing', 'developer');
    image

  5. 새로운 topic 테이블에 author_id값을 입력하면서 새로 작성하자.
    mysql> INSERT INTO topic (id, title, description, created, author_id)
         -> VALUES(1, 'My SQL', 'MySQL is ...', '2018-02-09 17:49:59', 1);
    image

  6. 나머지 데이터도 이런식으로 입력하다가, 새로운 author가 등장하면
    1) author 테이블에서 추가 -> 2) topic테이블에서 author_id 입력을 해주자.

    mysql> INSERT INTO topic (id, title, description, created, author_id)
         -> VALUES(2, 'Oracle', 'Oracle is ...', '2019-01-04 10:48:24', 1);
  7. mysql> INSERT INTO author (id, name, profile) VALUES(2, 'duru', 'data administrator');

    mysql> INSERT INTO topic (id, title, description, created, author_id)
         -> VALUES(3, 'SQL server', 'SQL server is ...', '2019-01-04 10:49:23', 2);
    mysql> INSERT INTO author (id, name, profile) VALUES(3, 'taeho', 'data scientist, developer');


    mysql> INSERT INTO topic (id, title, description, created, author_id)
         -> VALUES(5, 'MongoDB', 'MongoDB is ...', '2019-01-04 10:52:30', 1);

    image

+ Recent posts