반응형

안녕하세요. 신기한 연구소입니다.

 

데이터 모델링에 대한 용어들이 많은데요.

특히 같은 의미인 듯한데 다른 용어를 사용하는 거 같기도 하고

혼동되는 경향이 있더군요.

용어를 쉽게 이해할 수 있게 표현해봤는데 처음 접하는 분들에게 도움이 되길 바라는 마음에

최대한 이해하기 쉽게 설명했습니다.

 

 

 

엔터티(Entity)

업무적으로 분석을 하면 그룹을 선정할 수 있습니다.

임직원, 제품, 계약, 법인카드, 계좌, 거래처 등등..

이렇게 업무 분석 중 도출되는 개체들을 엔터티(Entity)라고 합니다.

 

릴레이션R

관계형 데이터 모델을 구성할 때 사용하는 용어인데

릴레이션R 스키마(Scheme) 과 릴레이션R 인스턴스로 구분할 수 있습니다.

릴레이션R은 애트리뷰트(속성), 튜플, 애트리뷰트값(원자값), 도메인, 인스턴스 용어를 사용합니다.

 

테이블

개념 모델링, 논리 모델링을 거쳐 물리 모델링을 통해 엔터티(릴레이션R)를 기반으로 실제 물리적인 데이터를 저장하는 공간을 테이블이라고 합니다.

 

엔터티(Entity), 릴레이션R, 테이블 관계

개념 모델링 시 추출한 개체를 엔터티라 부르고,

논리 모델링을 통해 물리 모델링으로 엔터티를 테이블로 구성하고

테이블을 관계형 데이터 모델로 정의할 때는 릴레이션R이라고 합니다.

어떻게 보면 셋 다 같은 듯 보이지만,

보통은 개념/논리에서 도출된 엔터티(Entity)를 변환해서 물리의 테이블을 만듭니다.

하지만, 성능 등을 고려해 정규화 또는 비정규화를 통해 물리적인 구성은 변환할 수 있습니다.

그래서 엔터티 그대로 테이블이 되지 않는 경우도 있습니다.

예를 들면 슈퍼/서브타입의 경우가 있답니다.

 

릴레이션R은 조건과 상황에 따라 반드시 테이블과 일치하는 건 아닙니다.

예를 들어서, 애트리뷰트 값에 원자값이 아닌 값이 들어갈 수 있다면 (한 컬럼에 값이 2개, “남, 28세”)

이 컬럼을 갖는 테이블을 만들 수는 있지만 릴레이션R의 정의에 맞지 않습니다.

 

결론은,

개발자가 개발할 때 SQL문에서 사용하는 from 절의 테이블 명은 물리 모델링에서 산출된 테이블이고,

그 테이블을 만들기 위해 설계 시 나온 테이블의 개념적, 논리적 산출물이 엔터티(Entity)이며

그 테이블을 관계형 데이터 모델에서는 릴레이션R이라고 합니다.

 

깁스냐, 캐스팅이냐, 석고냐 같은 듯 다르게 부르는 거라고 보시면 되겠네요. ㅎㅎㅎ

 

결국 개념적 엔터티와 관계형 릴레이션R은 잘 구성되고 최적의 성능을 낼 수 있는 물리적 테이블을 위해 필요한 과정의 산물이라 보면 되겠습니다.

 

애트리뷰트(속성, Attribute)

테이블의 열과 같은 의미이며 도메인 위에 정의된다고 보시면 됩니다.

개발자들은 컬럼명으로 익숙하겠네요.

 

도메인(Domain)

애트리뷰트(속성, Attribute) 값의 범위입니다.

값의 타입과 크기(Char(3), Integer…)의 설정입니다.

성별이라는 컬럼이 있다면 “남/여” 또는 코드값으로 “0/1”등으로 값을 범위를 정하고 char(1)로 타입과 사이즈를 지정하는 것을 도메인(Domain)이라고 합니다.

 

릴레이션R 스키마

릴레이션R 이름(테이블명)과 애트리뷰트(속성)를 릴레이션R 스키마라고 합니다.

개발자가 보는 테이블 명세서/정의서로 이해하면 되겠네요.

 

릴레이션R 인스턴스

테이블을 만들면 해당 컬럼들에 값이 채워집니다.

개발자는 select * from A; 로 검색하면 해당 테이블의 전체 데이터가 나오는데

그 전체 데이터를 인스턴스라고 합니다. 튜플의 집합이라고도 합니다.

 

릴레이션R 스키마와 릴레이션R 인스턴스를 인스턴스R이라고 합니다.

 

튜플/투플

관계형 데이터 모델에서 부르는 (릴레이션R) 인스턴스와 같은 의미로

테이블의 모든 행(데이터)을 말합니다.

 

차수

릴레이션R의 애트리뷰트(속성)의 개수입니다.

테이블의 컬럼 개수로 이해하시면 편합니다.

이 테이블에 컬럼이 5개 있다 = 5차 릴레이션R

 

카디널리티(카디날리티, Cardinality)

튜플의 수입니다.

개발자 분들은 select count(*) form A; 로 얻는 전체 행의 수입니다.

직원 테이블에 직원 10명의 정보가 있다면

카디널리티는 10입니다.

 

데이터 모델링의 3단계

 

개념적 데이터 모델링

업무를 분석하면서 엔터티를 정의하고,

관계를 정의하고,

키를 설정하는 등의 작업을 하는 모델링.

 

논리적 데이터 모델링

상세화 작업을 하는데 정규화도 진행한다.

식별자와 속성을 정의한다.

엔터티 상세화 작업 및 관계 등 작업을 한다.

ERD를 보면 한글명으로 되어 있는데..

분석 설계를 업무 중심으로 논리적으로 진행하므로

현지 언어로 표현하면 쉽게 이해할 수 있겠지요?

 

물리적 데이터 모델링

물리적 저장소 설계 및 테이블, 인덱스, 제약조건 등을 생성합니다.

실제 SQL문에서 사용할 테이블 명과 컬럼명이라

ERD에서 물리 설계는 정의된 영어/영어 약자 등으로 되어 있습니다.

 

잘못된 정보나 수정할 부분이 있으면 댓글 주세요. 

감사합니다.

반응형
반응형

안녕하세요 신기한 연구소입니다.

여름인데 생각보다 많이 덥지는 않네요.

저녁엔 쌀쌀해서 7월인데

이불을 찾게 되네요. ㅎㅎ

예전부터 프로젝트를 하다 보면

사실 개발자인데 DB작업도

같이 해야 하는 경우가 허다합니다.

대형 프로젝트의 경우는

DBA와 설계자가 분석, 설계하고

데이터베이스를 구성해주고

개발자는 ERD나 테이블 정의서 등을

보면서 쿼리(SQL)를 작성하는데요.

 

그리 크지 않거나 기존 사이트에

추가 작업용 미니 프로젝트를 하게 되면

개발자가 직접 테이블도 설계하고

ERD도 그리거나 추가하는 등

어찌 보면 개발자가 할 일이 아닌 것도

접하게 됩니다.

그렇다고 못한다고 빼 째라 할 수도 없고~

 

개발 하다가 데이터베이스 관련 작업을

하는 경우가 다반사기에..

기본 용어를 정리해봤어요.

물론 대부분 아시는 분들도 많지만..

저도 나름 복습하는 의미로~

엔터티(Entity), 속성(Attribute), 도메인(Domain)

 

 

먼저,

엔터티(Entity)입니다.

엔티티로 말하는 경우도 있는데

엔터티로 사용하면 됩니다.

 

그럼 엔터티(Entity)는 무엇일까요?

쉽게 개발할 때 쿼리(SQL) 작성 시

from 절에 쓰는 테이블로 이해하면 편합니다.

우리가 개발하는 데이터베이스 프로그램은

대부분 업무를 기반으로 합니다.

업무를 하기 위해서는 정보가 필요한데요.

은행을 생각해보면

고객, 계좌, 지점, 직원 등을

먼저 생각할 수 있지요.

고객, 계좌, 지점, 직원은

은행에서 업무적으로 필요한 객체들입니다.

전부 명사로 되어 있는데

각 명사들은 식별하거나 특징을

나타낼 수 있는 속성을 가지고 있어요.

고객이라면, 고객번호, 이름, 연락처 등

이렇게 업무적으로 필요하고

속성들을 저장할 수 있는 것들을

엔터티(Entity)라 합니다.

 

이렇게 이야기하다 보니

속성(Attribute)도 설명이 되었네요.

테이블을 구성하는 컬럼들을

속성이라 생각하면 됩니다.

그 속성들은 값을 가질 수 있어요.

그 값이 바로 업무에 필요한 정보들이고요.

예를 들면 고객이라는 엔터티(Entity)의 속성은

이름, 연락처, 주소, 가입일 등이 있습니다.

 

우리가 코드성 데이터를 구성하고

사용하다 보면 도메인(Domain)이라는

용어를 접하게 되는데요.

도메인은 위에서 설명한

속성들에 가질 수 있는 값의 범위를

나타냅니다.

 

예를 들어보면,

성별에 대해 코드 속성이 있다고 하면

성별은 남/여 둘 중 하나가 됩니다.

그래서 코드로 0 = , 1 =

이렇게 정의했다고 하면

0, 1 외의 값 외에는 사용할 수 없게

정의하는 게 도메인입니다.

또한 0, 1은 숫자이며 길이는 1 자리면 되기에

타입과 사이즈를 정해주는 것도

도메인이라 합니다.

 

테이블의 컬럼 값을 구성할 때

값의 범위, 데이터타입, 제약사항 등을

설정하는데 그 범위 값의 설정을

도메인이라 생각하면 됩니다.

 

이번 포스팅에서는 엔터티, 속성, 도메인에

대해 간단히 살펴봤습니다.

 

날씨도 덥고

코로나로 개발하기 힘든 환경인데

다들 힘내시고

조금이라도 도움이 되길 바랍니다.

 

잘못된 내용이나 수정이 필요하면 댓글 주세요~

반응형