해당 포스트는
SQLD를 학습하며 정리한 내용에 대한 포스트입니다.
이론을 학습한 내용을 정리하고 퀴즈, 기출문제 등을 기록하려고 합니다.
🌈 속성 (Attribute)
💻 속성이란?
- 사람이나 사물을 정의할 때 보통 여러가지 특징들이 수식어로 붙게 된다. 
- 사물이나 개념의 - 특징을 설명해줄 수 있는 항목들을 속성이라고 부른다.
- 속성이라는 것은 업무에서 필요한 정보인 엔터티가 가지는 항목이다. 
- 속성은 의미상 더 이상 쪼개지지 않는 레벨이어야 하고 프로세스에 필요한 항목이어야 한다. 
- 업무(프로세스)에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더이상 분리되지 않는 최소의 데이터 단위 
예를 들어 연예인이라는 엔터티에 이꼬비라는 인스턴스가 있을 때
국적이라는 속성이 있을 수 있지만 업무상 불필요한 데이터라고 판단되면국적이라는 속성은 삭제하는 것이 바람직하다.
속성의 특징
- 속성은 업무에서 관리되는 정보
- 속성은 하나의 값만 가진다
- 주식별자에게 함수적으로
종속된다.즉, 기본키가 변경되면 속성의 값도
변경된다.
속성 명명법
- 의미가 있는 문자를 사용
- 업무에서 사용되는 명칭을 사용
- 약어의 사용은 가급적 지양
- 속성의 이름은 애매모호하지 않게, 복합 명사를 사용하여 구체적으로 명명함으로써 전체 데이터모델에서
유일성을 확보하는 것이 반정규화, 통합 등의 작업을 할 때 혼란을 방지할 수 있는 방법이 됨.
💻 속성값
- 각각의 속성은 - 속성값을 가지며 속성값은 엔터티에 속한- 하나의 인스턴스를 구체적으로 나타내주는 데이터라고 볼 수 있다.
- 하나의 속성은- 하나의 속성값만가질 수 있다. (❌ 하나 이상 ❌)
만약 하나의 속성이 여러 개의 속성값을 갖는 경우 별도의 엔터티로 분리하는 것이 바람직하다.
예를 들어 아래 테이블의 직업이라는 속성에 속성값이 여러 개일 경우
| 이름 | 생년월일 | 직업 | 
|---|---|---|
| 이꼬비 | 19900402 | 개발자, 연구원, 유튜버 | 
아래의 테이블과 같이 별도의 엔터티로 분리
| 이름 | 직업 | 
|---|---|
| 이꼬비 | 개발자 | 
| 이꼬비 | 연구원 | 
| 이꼬비 | 유튜버 | 
💻 엔터티, 인스턴스, 속성, 속성값의 관계
정리해보면 엔터티 ⊃ 인스턴스 ⊃ 속성의 관계가 성립한다는 것을 알 수 있다.
이것을 각각의 표기법으로 나타내면 다음과 같다.
- 한 개의 엔터티는 - 두 개 이상의 인스턴스를 갖는다.
- 한 개의 인스턴스는 - 두 개 이상의 속성을 갖는다.
- 한 개의 속성은 - 하나의 속성값을 갖는다. (❌ 하나 이상 ❌)
💻 분류 
🔍 분해 여부에 따른 분류
| 종류 | 설명 | 
|---|---|
| 단일 속성 | - 하나의 의미로 구성된 것으로 회원ID, 이름 등 | 
| 복합 속성 | - 여러 개의 의미가 있는 것으로 대표적으로 주소가 있다.- 주소는 시, 군, 동 등으로 분해될 수 있다. | 
| 다중값 속성 | - 속성에 여러 개의 값을 가질 수 있는 것- 예를 들어 상품 리스트가 있다. - 다중값 속성은 엔터티로 분해된다. | 
🔍 특성에 따른 분류
| 기본 속성 (Basic Attribute) | - 업무 프로세스 분석을 통해 바로 정의가 가능한 속성 - 비지니스 프로세스에서 도출되는 본래의 속성이다.예) 회원ID, 이름, 계좌번호, 주문 일자 등 | 
| 설계 속성 (Designed Attribute) | - 업무에 존재하지는 않지만 설계하다 보니 필요하다고 판단되어 도출해낸 속성 - 데이터 모델링 과정에서 발생되는 속성- 유일한 값을 부여한다.예) 상품코드, 지점코드, 학번 | 
| 파생속성 (Derived Attribute) | - 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성 - 즉, 다른 속성에 의해서 만들어지는 속성이다.예) 합계, 평균 등 | 
기본속성
- 엔터티의 가장 일반적인 속성 
- 업무 프로세스 분석을 통해 바로 정의가 가능한 속성들이 속한다. 
- 엔터티의 가장 많은 비율을 차지하는 속성 
- 일부 설계속성과 파생속성을 제외한 모든 속성이 기본속성에 해당 
설계속성
- 업무에 존재하지는 않지만 설계 과정에서 합리적인 모델링을 위해 만들어진 속성 
- 속성들의 속성 값이 다른 인스턴스들의 속성값과 중복될 수 있는 경우 - 유니크함을 보장하지 못하기 때문에 이때 고유한 값을 가지는 설계속성을 할당하여 인스턴스에 유니크함을 부여하는 것
 
- 모델링을 위해 인위적으로 만들어서 정의한 속성으로 일련번호와 같이 유니크한 식별자를 부여하기 위한 것이 목적 
파생속성
- 다른 속성으로부터 파생된 속성을 의미 
- 데이터 조회 시 빠른 성능을 보장하기 위해 본래의 속성값을 계산하여 따로 저장할 수 있도록 만든 속성 
- 계산된 값이나 가공된 값 
- 재고를 계산하여 속성으로 가지고 있는 경우 이것은 파생속성에 해당 
- 파생속성을 설계할 경우 반드시 데이터의 정합성이 고려 
- 계산 과정에서 누락되는 데이터가 생기는 경우 - 결과값이 엉터리가 될 수 있는 위험 요소가 존재하기 때문에 불가피하게 필요한 경우에만 정의하는 것이 좋다.
 
🔍 구성방식에 따른 분류
| PK(Primary Key)속성 | 엔터티의 인스턴스들을 식별할 수 있는 속성 | 
| FK(Foreign Key)속성 | 다른 엔터티의 속성에서 가져온 속성 | 
| 일반속성 | PK, FK를 제외한 나머지 속성 | 
PK 속성
- 엔터티에 속한 각 인스턴스에 유니크함을 부여하는 속성 
- 상품 엔터티의 상품코드, 학생 엔터티의 학번, 직원 엔터티의 사번 등 
FK 속성
- 다른 엔터티와 관계를 맺게 해주는 매개체 역할을 하는 속성 
- 다른 엔터티의 PK값과 일치하거나 NULL 값을 가질 수도 있다. 
- 직원 엔터티의 부서 코드, 학생 엔터티의 학과코드, 회원 엔터티의 회원등급코드 등 
일반속성
- PK, FK를 제외한 나머지 속성을 일반속성이라고 부른다. 
- 상품 엔터티의 상품명, 가격, 학생 엔터티의 이름, 생년월일 등 
구성방식에 따른 분류 : PK속성 - FK속성 - 일반속성
특성에 따른 분류 : 기본속성 - 설계속성 - 파생속성
💻 도메인 (Domain)
- 속성이 가질 수 있는 - 속성값의 범위를 도메인이라고 하며, 엔터티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것
- 실제 속성값이 올바르게 되었는지 확인한다. 
- 속성명과 반드시 동일할 필요는 없다. 
- 엔터티를 정의할 때 데이터 타입과 크기로 나타낼 수 있다. - 예) 우편번호는 다섯 자리의 숫자라는 범위를 가지고 있고, 이것은 엔터티를 정의할 때 데이터 타입과 크기로 나타낼 수 있다. 
- 예) 성별이라는 속성의 도메인은 남자와 여자이다. 
 
용어사전이란?
엔터티의 속성명을 정의할 때 명확한 의미의 이름을 부여하고 다른 엔터티와의 혼란을 예방하기 위해 이용하는 것
하나의 데이터베이스에서 같은 의미를 가진 테이터가 엔터티마다 다른 명으로 정의된다면 혼란스러울 수 있다.
이런 현상을 방지하기 위해 설계 시
용어사전을 두고 각 엔터티에 공통된 룰로 적용하는 것이 좋다.
🎯 추가 내용
📚 레퍼런스
정미나. (유튜브 선생님에게 배우는) 유선배 SQL개발자(SQLD) 과외노트 / [정미나 저] (2023). Print.
한국데이터산업진흥원. SQL 자격검정 실전문제 : 국가공인 SQL전문가·국가공인 SQL개발자 / 한국데이터산업진흥원 [편] (2020). Print.