상세 컨텐츠

본문 제목

[SEOMARU] データベース設計入門#1 リレーションとER図 데이터베이스 입문

일본어/CS지식(일본어)

by Gopythor 2023. 11. 21. 14:40

본문

728x90
반응형

1회째에는 릴레이션과 ER도에대해 다뤄볼 것이다.

릴레이션은 테이블의 관계를 나타내는 것이다. 전부 해서 3종류가 있다.

1:n 1 대 다

n:n 다 대 다

1:1

n은 많다고 해서 다라고 읽는다.

1 대 다에 대해 설명.

회사 테이블과 사원 테이블이 있다.

한 회사에 복수의 사원들이 있다.

그러므로 1 대 다라고 이야기한다.

실제로 사원의 수가 0이라도, 1, 2 라도 괜찮으므로, 어쨌든 복수의 경우는 n이다.

 

n:n에 대해 설명하겠다.

이번에는 사원과 서클 테이블이 있어서, 사원 1명이 복수의 서클에 소속할 수 있게 한다.

이 경우에는 사원이 복수의 서클에 속할 수 있다.

서클은 복수의 사원을 가질 수 있다.

테이블 관계는 n 대 n이 된다.

 

한명의 사원은 한명의 개인정보와 연결된다. 이는 1:1 관계이다.

릴레이션은 3종류가 있다. 그 중 n:n의 경우에는 특수한 테이블을 사용한다. 중간테이블은 나중에 설명하겠다.

 

ER도는 릴레이션을 나타낸다. 잘 나타낸 사이트가 있으므로 해당 정보를 이용할 것이다.

https://it-koala.com/entity-relationship-diagram-1897

 

 

ER도는 3개의 기호를 사용해 릴레이션을 나타낸다.

원 모양은 제로.

1자 모양은 1

새발 모양은 다 즉 n을 나타낸다.

 

1:1 관계는 우선 선으로 잇는다.

그리고 1:1이므로 세로선을 양쪽에 긋는다.

 

 

 

n은 새발 표시로 표시한다. 1:n을 ER도로 표시하면, 위와 같다.

사원테이블과 써클 테이블이 있다. 써클은 만들었지만, 누구도 참가하지 않는 경우는 0가 될 수 있으므로 0 이상이므로 세로표가 아닌 0의 표를 넣는다. 기억해주길 원하는 것은 0이 있을지 없을지는 설계에서 중요하지 않다.

 

대부분의 경우 위와 같다면 OK다.

ER도를 쓸 때에도, 애매한 경우가 있다.

위와 같이 하면 된다.

 

데이터베이스를 사용할 때, 현장에서 사용하지 않는 많은 용어들이 나온다. 그래서 머리를 정리하기 위해 어느 용어를 기억해야할지 정리할 것이다.

ER도는 기억해야 한다.

릴레이션도 기억해라.

테이블을 별명으로 엔티티라고도 이야기한다. 실제로 엔티티라고 부르는 사람은 없다. 모두 테이블이라고 이야기한다. 엔티티는 기억하지 않아도 된다.

컬럼을 어트리뷰트라고도 하지만, 어트리뷰트라고 이야기하는 사람도 없기 때문에, 기억하지 않아도 된다. 모두 컬럼이라고 이야기한다.

한테이블이 다른 테이블과 가질 수 있는 관계를 카디널리티라고 한다. 실제로 별로 잘 안쓰인다.

그러한 것이 있었다는 것을 알고만 있으면 된다.

 

IE기호

 

IDEF도 있지만, 실제 현장에서는 IE를 많이 쓴다. 이를 알고만 있어라.

IE와 IDEF의 용어 자체는 기억할 필요는 없다.

 

 

데이터베이스 설계를 할 때, 마스터와 트랜잭션이라는게 잘 나온다.

아마존과 같은 EC사이트는 상품테이블이라는 중요한 테이블을 마스터계라고 한다. 그리고 구입이력같은 흘러가는 테이블을 트랜잭션계라고 한다. 실제로 DB설계를 하는데 있어서 이건 마스터계구나, 이건 트랜잭션계구나라는 것은 별로 생각하지 않아도 된다.

ER도를 그리는 툴.

초보자는 Cacoo를 추천한다.

이미 존재하는 데이터베이스에 대해서는 ER도를 만들고 싶을 때에 MySQL Workbench를 추천한다. 기존의 테이블로 ER도를 자동으로 만들어 준다. 도중부터 프로젝트에 참여해서, ER도가 없으면 해당 프로그램이 작성해준다. 데이터베이스는 릴레이션 관계를 알아야된다. 구조를 이해하는 부분부터 해야 한다. 그 DB구조를 이해할 수 있게 하는 도구가 ER도이다.

사원 테이블과 서클 테이블이 있다. n:n 관계이다. 실제로 테이블설계를 해보자.

1명의 사원은 복수의 서클에 속할 수 있다. 그리고 서클은 복수의 사원에 관계될 수 있다. 이를 위해 어떤 칼럼을 추가해야하는가?

초보자는 위와 같은 실수를 하게 된다.

사원 테이블에 서클id_1 서클id_2 등 외부키를 갖는다.

서클 테이블 쪽에도 사원id_1, 사원id_2 등 외부키를 갖는다.

SQL안티패턴으로 잘못된 형태이다.

서클에 2개밖에 소속이 안되고, 서클에서도 2명의 사원밖에 포함못시킨다. 확장성이 나쁘다. 좋지 않은 설계가 된다. 서클 활동을 하지 않는 사원은 서클에서도 사용하지 않으므로 쓸모없는 컬럼이 된다. 그러한 면에서 좋지 않다.

 

이와같이 중간에 테이블을 사이에 둔다.

挟(はさ)みます 사이에 두다.

 

사원id와 서클id만을 가진 심플한 테이블이다. 이런 설계이면, 누군가가 서클에 들어갔을 때, 사원서클테이블에 1건의 데이터를 추가하면 되는 것이다. 사원은 여러 개의 서클에도 속할 수 있고, 서클에서도 몇명이라도 사원이 속할 수 있다. 그리고 쓸모없는 칼럼도 추가되지 않으므로, 아름다운 설계가 된다. 이와같이 n:n설계를 할 때에는, 중간에 테이블을 넣는게 이론적이다.

セオリー 이론

이를 중간테이블 또는 교차테이블이라고 한다.

중요하므로 한번 더 이야기하지만, n:n은 중간테이블을 끼워 넣는다.

그리고 중간테이블에는 쓸모없는 컬럼을 추가하지 않는다.

무언가를 추가하더라도, 우선도, 작성일, 갱신일 정도입니다.중간 테이블은 n:n 관계의 다리이므로 서클의 활동 기록이라던가 쓸모없는 정보를 추가하는 것은 설계적으로 이상해진다.

DB설계에는 초보자가 저지르기 쉬운 안티패턴이 있다.

해당 책에서 공부할 수 있다. 25패턴이 있다. 인류가 지금까지 잘못해온 나쁜 테이블의 설계를 살펴볼 수 있다. 정답으로 이끌어주는 쉬운 책이다. 가장 공부가 됐다.

 

https://youtu.be/T6g-DLWHscw?si=6y1IadfS1V2v4TfR

728x90
반응형

관련글 더보기

댓글 영역