Smart Student Coders

 

데이터 모델 표기법


ERD의 이해 및 소개

데이터 모델에 대한 표기법으로 1976년 피터첸이 Entity-relationship model(E-R Model)이라는 표기법을 만들었다. 엔터티를 사각형으로 표현하고 관계를 마름모 속성을 타원형으로 표현하는 이 표기법은 데이터 모델링에 대한 이론을 배울 때 많이 활용되고 있다. 우리는 이 데이터 모델 표기법을 사용하여 공부할 예정이다.

앞으로 배울 ERD의 예시

ERD을 이용하여 모델링 하는 방법

ERD를 작성하는 순서는 아래와 같다.

 

1. 엔터티를 그린다.

2. 엔터티를 적절하게 배치한다.

3. 엔터티간 관계를 설정한다.

4. 관계명을 기술한다.

5. 관계의 참여도를 기술한다.

6. 관계의 필수여부를 기술한다.

 

 

TIP!
일반적으로 사람의 눈은 왼쪽에서 오른쪽, 위 쪽에서 아래쪽으로 이동하는 경향이 있다. 따라서 데이터 모델링에서도 가장 중요한 엔터티를 왼쪽상단에 배치하고 이것을 중심으로 다른 엔터티를 나열하면서 전개하면 사람의 눈이 따라가기에 편리한 데이터 모델링을 전개할 수 있다.

ERD을 이용하여 모델링을 해보자 

 

 

ERD의 엔티티를 적절한 위치에 배치

데이터 모델에서도 가장 중요한 엔터티인 고객과 주문을 왼쪽 상단에 배치하여 다른 엔터티를 연결하는 방식으로 엔터티를 배치하였다. 주문에 따라 출고가 이루어졌으므로 주문이 위에 출고가 아래에 위치해 있다. 두 번째 업무흐름에 중심이 되는 엔터티, 보통 업무 흐름에 있어서 중심이 되는 엔터티는 타 엔터티와 많은 관계를 가지고 있으므로 중앙에 배치하도록 한다. 그림에서는 주문, 출고, 주문목록, 출고목록이 업무의 중심엔터티에 해당한다. 세 번째는 업무를 진행하는 중심엔터티와 관계를 갖는 엔터티들은 중심에 배치된 엔터티를 주위에 배치하도록 한다. 그림에서는 창고, 고객, 사원, 재고가 이에 해당한다.

 

 

ERD 관계를 보고 서로 관련있는 엔터티간에 관계를 설정

 

 

주의!!
초기에는 모두 Primary Key로 속성이 상속되는 식별자 관계를 설정하도록 한다. 중복되는 관계가 발생되지 않도록 하고 순환관계도 발생하지 않도록 유의하여 작성하도록 한다

ERD의 관계설정이 완료되면 연결된 관계에 관계이름을 부여 한다.

주의!!
관계이름은 현재형을 사용하고 지나치게 포괄적인 용어(예, 이다, 가진다 등)는 사용하지 않도록 한다.

관계가 참여하는 성격 중 엔터티내에 인스턴스들이 얼마나 관계에 참여하는 지를 나타내는 관계차수(Cardinality)를 표현한다.

위에서 봤던 그림에서 옆과같은 관계를 나태나는 기호를 이용한다. 관계의 관계차수를 지정한 ERD의 모습을 보여준다. 이부분은 다시 언급할 것이다.

 

 

 

 

 

 

아래와 같은 ERD이 나온다.

 


관계의 개념


관계의 정의

관계(Relationship)를 사전적으로 정의하면 상호 연관성이 있는 상태로 말할 수 있다. 이것을 데이터 모델에 대입하여 정의해 보면, “엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태”라고 할 수 있다.

학생과 교수는 가르치는 논리적인 연관성이 존재한다.

 

관계의 분류

 

관계는 존재에 의한 관계행위에 의한 관계로 구분될 수 있다.

이것은 관계를 연결함에 있어 어떤 목적으로 연결되었느냐에 따라 분류하기 때문이다.

존재에 의한 관계

 

학생 홍길동은 컴퓨터공학부에 속해있다 라는 존재에 의한 관계이다.

 

행위에 의한 관계

 

예약은 홍길동이 예약을 할 때 예악이 발생된다

 

관계의 표기법

관계의 표기법에는 2가지만 기억하면 된다

 

  • 관계명(Membership) : 관계의 이름
  • 관계차수(Cardinality) : 1:1, 1:M, M:N

관계명(Membership)

 

관계명은 엔터티가 관계에 참여하는 형태를 지칭한다. 각각의 관계는 두 개의 관계명을 가지고 있다. 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다. 아래의 예를 확인하자

엔터티에서 관계가 시작되는 편을 관계시작점(The Beginning)이라고 부르고 받는 편을 관계끝점(The End)이라고 부른다. 관계 시작점과 끝점 모두 관계이름을 가져야 한다.

 

관계차수(Cardinality)

위에서 잠깐 언급했던 내용이다. 두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것을 관계차수(Cardinality)라고 한다.

일반적인 관계차수 표현방법은 3가지가 있다

  • 1:1
  • 1:M
  • M:M

자세한 내용은 아래에서 확인하자

 

1. One to One (1:1)

 

관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 대해 오직 하나의 관계만을 가진다.

학생들의 병역사항은 학생 1명당 반드시 1개이다. 두 엔터티가 1:1의 관계를 가진다.

 

2. One to Many (1:M)

 

관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다. 그러나 반대의 방향은 단지 하나만의 관계를 가지고 있다.

 

학과에서는 여러 학생들을 포함할 수 있지만 학생들을 하나의 과에 소속된다(복수전공이 없다는 가정)

 

3. Many To Many (M:M)

 

관계엔터티의 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다. 반대의 방향도 동일하게 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나 또는 그 이상의 수와 관계를 가지고 있다

강의는 개설되면 여러학생들을 받을 수 있고 학생들을 여러 강의를 수강할 수 있다.

 

ERD직접 그려보기

ERD그리는 erdcloud

 

바로가기(클릭)

 

위 예시에 대한 ERD를 그려봤습니다! 

 

 

아래의 화면에서 간단한 회원가입을 하고 여러분이 집접 ERD를 그려봅시다! 

로그인을 하신뒤에 우측 상단에 저렇게 생긴 버튼을 누르면 됩니다!

 

새로운 ERD를 생성하신뒤

위와같은 버튼으로 새로운 엔티티를 생성할 수 있어요!

다양한 버튼으로 엔티티들과의 관계를 설정할 수 있습니다.

혹시 관계가 연결이 안된다면 차후에 포스팅 하게 될 것이지만 KEY컬럼를 설정해줘야합니다!! 

노란색+를 이용해서 KEY를 추가해주세요 파란색+는 일반 컬럼추가입니다.

이제 좌측 하단에 빨간색+버튼을 이용해서 실습을 해봅시다!!

함수

함수(FUNCTION)는 간단하게 말해서 값을 들어가면 원하는 값으로 변해져서 나오는 기능을 가지는 도구입니다 .

 

SQL에서 함수

 

SQL에서 함수는 여러분들이 아는 함수와 비슷한 기능을 합니다. 

수학에서 함수는 식을 만들고 계산하는 과정이 있지만 데이터베이스에서는 내장 함수(BUILT-IN FUNCTION)라고 미리 만들어진 함수들이 있고 우리는 그것들의 사용법만 익히고 사용하기만 하면됩니다!!

 

이번 파트에서는 그러한 함수들을 소개하고 직접 사용해보는 시간을 가져봅시다!!


함수에 들어가기 앞서

함수의 내용이 쉽고 재밌지만 양이 조금 많아서 여러파트로 나눠서 진행하기로 했습니다!! 오늘 하는 part 1는 비교적 익속하고 쉬운 내용이니 가볍게 봐주세요! 


함수의 기본적인 구조

기본구조
함수명 (칼럼이나 표현식 [인자1, 인자2, 인자3 ...(필요한 만큼)])

엥? 잘모르시겠다구요? 감이 잘 안오신다구요?  아래의 내용을 확인해봅시다!

 

숫자형 함수

 

숫자형 함수는 영어 단어만 알고 있다면 내용을 유추할 수 있습니다!

혹시 모르는 단어가 있다면 이번 기회에 새로운 단어를 배워보는 것은 어떨까요?

 

함수 함수 설명
ABS(숫자) 숫자의 절대값을 보여준다.
SIGN(숫자) 숫자가 양수인지, 음수인지, 0인지를 구별한다.
MOD(숫자1, 숫자2) 숫자1을 수자2로 나누어 나머지 값을 보여준다.
CEIL(숫자) 숫자보다 크거나 같은 최대 정수를 보여준다.
FLOOR(숫자) 숫자보다 작거나 같은 최대 정수를 보여준다.
TRUNC(숫자 , [원하는 자리수]) 숫자를 원하는 자리수에서 잘라서 버린다. 원하는 자리수는 적지 않을 수 있고 생략되면 0으로 입력된다.
ROUND(숫자, [원하는 자리수]) 숫자를 원하는 자리수에서 반올림한다. 원하는 자리수는 적지 않을 수 있고 생략되면 0으로 입력된다.
POWER(숫자1, 숫자2) 숫자1을 숫자2 만큼 제곱한 값을 보여준다.
SQRT(숫자) 숫자를 제곱근한 값을 보여준다.

혹시 모르는 단어가 있나요? 

이번 기회에 배우면 학생 여러분들은 두고두고 쓰기 좋을 겁니다!!

 

함수 예제
ABS

ABS(-5)

ABS(10)

SIGN

SIGN(10)

SIGN(0)

 

SIGN(-10)

CEIL

CEIL(38.1235)

CEIL(-38.1235)

FLOOR

FLOOR(38.1235)

FLOOR(-38.1235)

ROUND

ROUND(38.1235, 3)

ROUND(38.1235, 1)

 

ROUND(38.1235, 0)

 

ROUND(38.1235)

 

TRUNC

TRUNC(38.1235, 3)

TRUNC(38.1235, 1)

 

TRUNC(38.1235, 0)

 

TRUNC(38.1235)

POWER

POWER(2,4)

POWER(3,2)

 

POWER(5,2)

 

SQRT

SQRT(2)

SQRT(3)

 

SQRT(18)

위의 예제들을 직접 실습해보고 결과를 확인해봅시다!!! 

중요한 팁!!!
어떻게 실습을 하나요????

바로 DUAL이라는 것을 사용합니다!! 

DUAL은 가상의 테이블 같은 것입니다. 딱히 테이블이 필요하지 않은 쿼리문같은 곳에서 사용하죠!!

위에 예제를 하나만 같이 풀어볼까요? 

-5의 절대값을 알고 싶을 때 사용하는 "ABS(-5)"를 SQL로 작성하려면 아래와 같이 작성합니다

SELECT ABS(-15) FROM DUAL;

그러면 결과가 나올거에요!!  나머지 실습들도 해봅시다!


 

 

 

'데이터베이스 > SQL의 기본과 활용' 카테고리의 다른 글

[SQL] WHERE (Part 2)  (0) 2019.11.11
[SQL]산술연산자와 합성연산자  (0) 2019.10.21
[SQL] DML(Data Manipulation Language)  (0) 2019.10.13
[SQL] 실습환경  (0) 2019.09.29
[SQL]SQL을 시작하기 앞서  (0) 2019.09.29

데이터 모델의 이해

 


모델링의 정의

사람이 어떤 목적을 달성하기 위해 커뮤니케이션의 효율성을 극대화한 고급화된 표현방법으로 설명될 수 있다.

사람이 살아가면서 나타날 수 있는 다양한 현상은 사람, 사물, 개념 등에 의해 발생된다고 할 수 있으며 모델링은 이것을 표기법에 의해 규칙을 가지고 표기하는 것 자체를 의미한다. 즉 모델을 만들어가는 일 자체를 모델링으로 정의할 수 있다.

 

 

모델링의 특징

위의 정의를 요약하여 모델링의 특징을 요약하면 추상화, 단순화, 명확화의 3대 특징으로 요약할 수 있다.

 

1) 추상화(모형화, 가설적)는 현실세계를 일정한 형식에 맞추어 표현을 한다는 의미로 정리할 수 있다. 즉, 다양한 현상을 일정한 양식인 표기법에 의해 표현한다는 것이다.

2) 단순화는 복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념을 의미한다.

3) 명확화는 누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확(正確)하게 현상을 기술하는 것을 의미한다.

 

따라서 모델링을 다시 정의하면 ‘현실세계를 추상화, 단순화, 명확화하기 위해 일정한 표기법에 의해 표현하는 기법’으로 정리할 수 있다. 정보시스템 구축에서는 모델링을 계획/분석/설계 할 때 업무를 분석하고 설계하는데 이용하고 이후 구축/운영 단계에서는 변경과 관리의 목적으로 이용하게 된다.

 

모델링이 제공하는 기능

모델링이 제공하는 기능에는 6가지가 있다.

  • 시스템을 현재 또는 원하는 모습으로 가시화하도록 도와준다.
  • 시스템의 구조와 행동을 명세화 할 수 있게 한다.
  • 시스템을 구축하는 구조화된 틀을 제공한다.
  • 시스템을 구축하는 과정에서 결정한 것을 문서화한다.
  • 다양한 영역에 집중하기 위해 다른 영역의 세부 사항은 숨기는 다양한 관점을 제공한다.
  • 특정 목표에 따라 구체화된 상세 수준의 표현방법을 제공한다.

 

데이터 모델의 중요성 및 유의점


파급효과(Leverage)

시스템 구축 작업 중에서 다른 어떤 설계 과정보다 데이터 설계가 더 중요하다.

 

시스템 구축이 완성되어 가는 과정에서 대규모의 데이터 이행을 성공적으로 수행하기 위한 많은 단위 테스트들이 수행되고 이러한 과정들이 반복된다. 각 단위 테스트들이 성공적으로 수행되고 완료되면 이를 전체를 묶어서 병행테스트, 통합테스트를 수행하게 된다. 만약, 이러한 시점에 데이터 모델의 변경이 불가피한 상황이 발생한다고 가정해 보자. 이를 위해서 데이터 구조의 변경에 따른 표준 영향 분석, 응용 변경 영향 분석 등 많은 영향 분석이 일어난다. 그 이후에 해당 분야의 실제적인 변경 작업이 발생하게 된다. 변경을 해야 하는 데이터 모델의 형태에 따라서 그 영향 정도는 차이가 있겠지만 이 시기의 데이터 구조의 변경으로 인한 일련의 변경작업은 전체 시스템 구축 프로젝트에서 큰 위험요소가 아닐 수 없다

복잡한 정보 요구사항의 간결한 표현(Conciseness)

데이터 모델은 구축할 시스템의 정보 요구사항과 한계를 가장 명확하고 간결하게 표현할 수 있는 도구이다.

 

정보 요구사항을 파악하는 가장 좋은 방법은 수많은 페이지의 기능적인 요구사항을 파악하는 것보다 간결하게 그려져 있는 데이터 모델을 리뷰하면서 파악하는 것이 훨씬 빠른 방법이다. 데이터 모델은 건축물로 비유하자면 설계 도면에 해당한다. 이것은 건축물의 설계 도면이 건축물을 짓는 많은 사람들이 공유하면서 설계자의 생각대로 일사불란하게 움직여서 아름다운 건축물을 만들어 내는 것에 비유할 수 있다. 데이터 모델은 시스템을 구축하는 많은 관련자들이 설계자의 생각대로 정보요구사항을 이해하고 이를 운용할 수 있는 애플리케이션을 개발하고 데이터 정합성을 유지할 수 있도록 하는 것이다. 이렇게 이상적으로 역할을 할 수 있는 모델이 갖추어야 할 가장 중요한 점은 정보 요구사항이 정확하고 간결하게 표현되어야 한다는 것이다

데이터 품질(Data Quality)

데이터베이스에 담겨 있는 데이터는 기업의 중요한 자산이다.

 

데이터는 기간이 오래되면 될수록 활용가치는 훨씬 높아진다. 그런데 이러한 오래도록 저장되어진 데이터가 그저 그런 데이터, 정확성이 떨어지는 데이터라고 한다면 어떨까? 이것은 해당 데이터로 얻을 수 있었던 소중한 비즈니스의 기회를 상실할 수도 있는 문제이다. 데이터 품질의 문제가 중요한 이유가 여기에 있다. 데이터 품질의 문제는 데이터 구조가 설계되고 초기에 데이터가 조금 쌓일 때에는 인지하지 못하는 경우가 대부분이다. 이러한 데이터의 문제는 오랜 기간 숙성된 데이터를 전략적으로 활용하려고 하는 시점에 문제가 대두되기 때문이다.
데이터 품질의 문제가 야기되는 중대한 이유 중 하나가 바로 데이터 구조의 문제이다. 중복 데이터의 미정의, 데이터 구조의 비즈니스 정의의 불충분, 동일한 성격의 데이터를 통합하지 않고 분리함으로써의 나타나는 데이터 불일치 등의 데이터 구조의 문제로 인한 데이터 품질의 문제는 치유하기에 불가능한 경우가 대부분이다


데이터 모델링의 3단계


현실세계에서 데이터베이스까지 만들어지는 과정을 그림과 같이 시간에 따라 진행되는 과정으로 표현했다. 추상화 수준에 따라 개념적 데이터 모델, 논리적 데이터 모델, 물리적 데이터 모델로 정리할 수 있다.

추상화 수준에 따라 개념적 데이터 모델, 논리적 데이터 모델, 물리적 데이터 모델로 정리할 수 있다.

 

처음 현실세계에서 추상화 수준이 높은 상위 수준을 형상화하기 위해 개념적 데이터 모델링을 전개한다. 개념적 데이터 모델은 추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링을 진행한다.

 

엔터티(Entity)중심의 상위 수준의 데이터 모델이 완성되면 업무의 구체적인 모습과 흐름에 따른 구체화된 업무중심의 데이터 모델을 만들어 내는데 이것을 논리적인 데이터 모델링이라고 한다.

 

논리적인 데이터 모델링 이후 데이터베이스의 저장구조에 따른 테이블스페이스 등을 고려한 방식을 물리적인 데이터 모델링이라고 한다

 

'데이터베이스 > 데이터 모델링의 이해' 카테고리의 다른 글

[데이터 모델링]ERD  (0) 2019.11.24

저번 시간에 이어서 WHERE의 Part 2는 SQL연산자, 부정비교 연산자, 부정 SQL연산자를 포스팅 하겠습니다.

 

혹시 저번 시간에 했던 WHERE의 내용들이 기억이 나지 않으면 아래의 WHERE을 눌러봅시다!!!! 

 


SQL연산자

SQL연산자라니?? 생소하죠? 그렇지만 걱정하지 마세요! 막상보면 간단합니다!!

SQL 전문가 가이드에는 아래와 같이 써있는데 한번 읽어보죠!

 

SQL 연산자는 SQL 문장에서 사용하도록 기본적으로 예약되어 있는 연산자로서 모든 데이터 타입에 대해서 연산이 가능한 4가지 종류가 있다.

바로 

BETWEEN a AND b

IN (list)

LIKE '비교 문자열'

IS NULL

4개인데요. 그럼 아래의 표를 봅시다!

연산자 연산자 의미
BETWEEN a AND b

BETWEEN이니까 사이 라는 뜻이에요 !

a와 b사이에 값들을 찾고 싶을 때 사용해요! 이때 a과 b값을 포함합니다!!

사용예시

SELECT F_NAMEAGE FROM FAMILY WHERE AGE BETWEEN 18 AND 24

나이18 24사이가족구성원들의 이름나이조회한다.

참고! 18살과 24살이 나오는 지 확인해볼까요?

IN (list)

IN은 안에 라는 뜻이에요!

list에 있는 값들중 어느 하나라도 있으면(일치하면) 됩니다! 하나만 존재하면 되는 것이므로 1개를 찾으면 더이상 찾지 않아요!!! 

사용예시

SELECT F_NAME FROM FAMILY WHERE AGE IN 18;

나이 18살인 가족구성원의 이름 조회한다.

LIKE '비교 문자열'

LIKE는 ~와 비슷하다 라는 뜻이에요!

비교 문자열의 같은 값을 찾아 줍니다!! 

아래의 TIP을 참고 하세요!!

사용예시

SELECT * FROM FAMILY WHERE F_NAME LIKE 'H%';

이름 'H'시작하는 가족구성원의 모든 컬럼 조회한다.

 

IS NULL

NULL인가? 

해당 내용이 비었는지 확인하는 연산자에요!!

사용예시

SELECT F_NAME FROM FAMILY WHERE AGE IS NULL;

나이 적혀있지 않은 가족구성원의 이름 조회한다.

참고! 나이가 적혀있지 않은 데이터가 없을 거에요! INSERT를 이용해서 새로운 데이터를 작성하고 실습해봐요!

LIKE는 "와일드카드"라는 문자와 함께 사용합니다!! 

TIP!!

%

(페센트)

어떠한 문자도 올 수 있습니다!

EX) '%철수'

--> 이름이 철수인 사람들 모두를 보입니다.

이름이 4글자인 사람도 볼 수 있습니다!!

_

(언더바)

_의 갯수 만큼 단일 문자를의미합니다!

EX) '_철수'

--> 이름이 철수인 사람들 모두를 보입니다.

이름이 4글자인 사람은 보이지 않습니다!!

 


부정 SQL연산자 

부정 SQL연산자는 위에서 배운 SQL연사들의 부정입니다! 

부정연산자는 LIKE를 제외하고 3개가 있고 생긴것은 동일하고 'NOT'이 붙습니다!!

NOT BETWEEN a AND b

NOT IN (list)

IS NOT NULL

으로 비슷한 형태를 가졌죠? 사용법도 아주 비슷해요!

연산자 연산자의미
NOT BETWEEN a AND b

NOT BETWEEN이니까 사이 없는 데이터 라는 뜻이에요 !

a와 b사이에 값들을 제외한 데이터를 찾을 때 사용해요!

이때 a과 b값은 포함하지 않습니다!!

NOT IN (list)

NOT IN은 없는 데이터 라는 뜻이에요! 즉, 포함하지 않다!

list에 있는 값들중 어느 하나라도 없으면(일치하는게 없으면) 됩니다! 

IS NOT NULL

NULL이 아닌가?  

해당 내용이 비어 있지는않은지 확인하는 연산자에요!!

앗! 이게 뭐지 눌러보고 싶은걸!!!

더보기

이번에는 예시가 없어서 서운했죠?

그럴줄 알고 준비한 깜짝퀴즈!!!

 

1) 나이20살과29사이의 나이가 아닌가족구성원들의이름나이조회

2)나이18살이 아닌 가족구성원의이름조회

3) 나이정보가 있는가족구성원의이름조회한다.

SQL연산자의 예시를 바탕으로 위의 예시를 만들어봅시다!!!

답보기↓

 

더보기

답!!!

SELECT F_NAME, AGE FROM FAMILY WHERE AGE NOT BETWEEN 20 AND 29; 
SELECT F_NAME FROM FAMILY WHERE AGE NOT IN 18;
SELECT F_NAME FROM FAMILY WHERE AGE IS NOT NULL;

 

'데이터베이스 > SQL의 기본과 활용' 카테고리의 다른 글

[SQL] 함수(Part 1)  (0) 2019.11.18
[SQL]산술연산자와 합성연산자  (0) 2019.10.21
[SQL] DML(Data Manipulation Language)  (0) 2019.10.13
[SQL] 실습환경  (0) 2019.09.29
[SQL]SQL을 시작하기 앞서  (0) 2019.09.29