Sad Puppy 3 '분류 전체보기' 카테고리의 글 목록 (7 Page) :: 개발자 아지트

2과목 개요


[SQL기본] 01. 관계형 데이터베이스 개요

 

데이터베이스 관련 용어 정리 

 

  • 데이터베이스(DataBase, DB)
    • 데이터를 일정한 형태로 저장해 놓은 것 ex)엑셀
  • 데이터베이스관리시스템(DataBase Management System, DBMS)
    • 기존 데이터베이스 기능에 추가로 데이터 손상을 방지 및 복구, 인증된 사용자만 접근 등 추가 기능을 지원하는 관리 시스템
  • 관계형 DBMS (Relational DBMS, RDBMS)
    • 테이블로 데이터를 관리하고 테이블간 관계를 이용해 데이터를 정의하는 방식으로, 대부분 기업이 사용하며 지금 공부하는 Oracle도 RDBMS 중 하나임 

  • 테이블(Table)
    • RDBMS에서 실제 데이터가 저장되고 조회되는 2차원 배열 형태의 저장소 공간
    • 엔터티, 속성, 인스턴스가 각각 DB가 이해할 수 있는 형태인 테이블, 컬럼, 튜플로 변경된 것

 

  • SQL(Structured Query Language)
    • RDBMS에서 데이터 정의, 조작, 조회, 제어 등을 하기 위해 사용하는 언어
    • (매우 중요한 내용이니 종류별로 어떤 문법이 있는지 외워야함)
DDL(Data Definition Language, 데이터 정의어) CREATE, ALTER, DROP, RENAME, TRUNCATE
DML(Data Manipulation Language, 데이터 조작어) SELECT, INSERT, UPDATE, DELETE, MERGE
DCL(Data Control Language, 데이터 제어어) GRANT, REVOKE
TCL(Transaction Control Language, 트랜잭션 제어어) COMMIT, ROLLBACK, SAVEPOINT

 

 

STANDARD SQL 개요

일반집합연산자와 순수관계연산자

 


[SQL기본] 02. SELECT문

 

SELECT란?

:테이블에서 원하는 데이터를 조회할 때 사용하는 문법

 


SELECT CUST_ID, CUST_NAME, BIRTH_DY

FROM TB_CUST

WHERE MONEY = 10000;

 

1. TB_CUST 테이블에서(FROM) 데이터를 가져오겠습니다. 

2. TB_CUST 테이블에서 MONEY (보유금액)이 10000인 튜플(행)만 가져오겠습니다. 

3. 출력되는 튜플(행)에 대해 CUST_ID, CUST_NAME, BIRTH_DY 컬럼(열)만 가져오겠습니다. 

 


SELECT *FROM TB_PRD;

TB_PRD 테이블의 모든 컬럼 정보를 출력합니다. 

 

==> *(애스터리스크)는 SELECT뒤에 사용되며 테이블 내의 모든 컬럼 정보를 출력함.


SELECT DISTINCT PRD_TYPE FROM TB_PRD;

TB_PRD 테이블의 PRD_TYPE 컬럼을 기준으로 값을 중복없이 출력합니다. 

 

==> DISTINCT는 SELECT 뒤, 컬럼 앞에 사용되며 해당 컬럼 정보에 대해 중복을 제거함. 

 


==> AS는 SELECT 부분에서 출력하려는 컬럼에 대해 새로운 별명(ALIAS)를 부여할 수 있음.

AS 사용시 주의사항

1. 띄어쓰기 불가

2. 문자로 시작 해야함

3. 예약어 불가

4. 특수문자는 $, _, # 만 가능

 


SELECT에서 연결연산하기 ( || 기호 사용하기 )

 


SELECT에서 사칙연산하기 

 


 

[식별자(Identifiers)란?]

엔티티 내 유일하게 인스턴스를 식별할 수 있는 속성의 집합

식별자 = primary key


식별자 분류 (*식별자의 종류는 다양하게 존재한다. )

 

1. 대표성여부: 주식별자(직원ID) vs 보조식별자(주민등록번호)

2. 스스로생성여부(자생여부) : 내부식별자 vs 외부식별자 (엔터티안에있는 식별자인지 아니면 외부에서 가져온 것인지(FK=외래키)

3. 단일속성여부 : 단일식별자 vs 복합식별자 (식별자가 1개냐? 그 이상이냐?- 그림 속 직원 연락처 테이블은 식별자 2개를 조합했음)

4. 대체여부 : 본질식별자 vs 인조식별자
(본질식별자: 부서명, 인조식별자: 부서명이 너무 길 경우 D002 이런식으로 코드 따자~(사람들이 편의를 위해서 임의로 코드같은 걸 만든 것임))

 

본질식별자: 업무에 의해 생성된 식별자     

인조식별자: 편의를 위해 인위로 만든 식별자     

NULL이란?

:아직 정해지지 않은 값을 의미한다. 

 

Q. 다음 중 고객ID가 C0006인 고객의 이름과 휴대폰번호는?

(1) 아직 어떤 값이 들어오지 않았음을 표현할 수 있다. 

 

(2) 테이블(=엔터티)의 특성상 행 X 열 형태의 유지를 해야한다. 

 

 

트랜잭션이란?

:데이터베이스의 논리적인 연산 단위 혹은 논리적인 업무단위

 

ex) 강태우(A계좌)가 김영희(B계좌)에게 1,000,000원을 송금하려고 한다.  어떤 일련 과정을 거쳐 송금 업무가 이뤄지는지 생각해보자.

 

ex) 누군가 요구사항을 이렇게 작성함

: 저희 쇼핑몰은 고객이 주문을 하면 주문 정보를 저장합니다. 하나의 주문정보에는 여러 상품이 있어서 주문상세정보로 저장을 합니다. 

 


식별관계 vs 비식별관계

 

식별자관계: 외래키(빌려온 키)가 PK(식별자)의 일부분인가?

비식별자관계: 외래키(빌려온 키)가 PK(식별자)의 일부분이 아닌가?

 

 

[조인이란?] == SQL의 꽃

: 식별자를 상속하고 이를 이용해서 데이터를 결합 한 것을 통해 여러 엔티티에서 필요한 데이터를 한번에 가져오는 것

 

Q. 회원ID 가 'A001' 인 회원의 이름과 휴대폰 번호는 뭘까?

 

조인을 사용하지 않는 경우
조인을 사용하는 경우


계층형 데이터 모델이란?

: 계층구조를 가진 데이터를 저장한 모델인 자기 자신의 엔터티와 관계가 발생하는 경우

하나의 사수 ID가 여러 직원을 가지는 경우

 

ERD그리는 순서 잘 보기

 

특수한 관계를 조회하는 계층 쿼리


상호배타적 관계란?

: A와 B가 C집단에 소속되었지만, 서로 공통적인 부분이 없는 관계

빨간 표시는 상호 배타적 관계를 표시함 (기호 잘 보기)

 

대출 번호는 PK

 

 

 

개정된 시험에서는 설계도 그림을 보고 정규화 상태인지 조인의 상태인지를 구분하는 것을 중요하게 봄

01. 정규화

: 데이터에 대한 중복을 제거하고 데이터가 관심사별로 처리되도록 엔터티를 쪼개 성능을 향상(조회/입력/수정/삭제 등)을 시키는 활동

단, 정규화가 대체로 좋은 것이며, 경우에 따라서는 반정규화(정규화의 반대)가 더 이득일 수도 있음

 

(반정규화: 중복을 포함하려고하고 엔터티를 합치는 과정임)

 

대부분 정규화를 거의하고, 특수한 사례에 대해서 반정규화를 진행함 

중복을 막기위헤 두번 입력된 데이터에 대해서 엔터티를 뜯었음

 

정규화시 입력/삭제/수정(DML)은 (무조건)성능 향상! 조회는 성능 향상 속은 저하 될 수 있음 


함수적 종속이란? F(X) = Y

: 정규화를 하기 위해 알아야 하는 개념으로 어떤 기준 값(컬럼(=속성))에 의해 데이터가 종속되는 현상을 의미함

 

만약 X가 Emp001이면 Y는 아이디 Emp001에 종속되는 유일한 인스턴스가 나옴

X: 결정자

Y: 종속자 

ex) 결정자(아이디) -> 종속자(이름, 나이, 연봉, 부서ID, 부서명) : 아이디가 나머지 모든 컬럼을 함수종속한다. 

ex) 결정자(부서ID) -> 종속자(부서명) : 부서ID가 부서명 컬럼을 함수종속한다. 


정규화 과정 상세히 알아보기 (시험에 잘 나옴)

대상의 형으로 가기까지 중간에 순서를 건너뛸 수 없음

 

비정규형: 데이터가 중복이 되어있어서 정규화가 필요한 상태 

도메인 원자성: 1차 정규화

1NF: 1차 정규화(도메인워자성 충족)를 통해 1차 정규형을 만들 수 있음 

 


정규화(1차 정규화)

: 엔터티에서 다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값(1개)으로 쪼개준다. 

= 원자성을 확보하기 위한 활동

= 하나의 속성에 하나의 값을 가질 수 있도록 쪼개줌 

비정규형 ->(1차 정규화) 1차 정규형

 

정규화의 대상 (위)

 


정규화(2차 정규화)

: [1정규형 -> 2정규형(NF)] 형태로 엔터티를 변경하는 활동이다. 

식별자에 부분 종속 하는 대상을 쪼개어 준다.

즉, 결정자 전부에 나머지 컬럼이 완전 종속하지 않고, 결정자 부분적으로도 종속한다면 쪼개야 한다.

 

*2차 정규화 푸는 팁*

1. 위에서 부분적 종속한다고 하는 것들을 따로 뜯어낸다. (결정자는 주식별자로)

 

2. 기존의 엔터티에서 학번이 가져간 일반속성을 제외하고 입력한다. 

 

3. 기존의 데이터를 파악하여 관계를 설정한다. 

 


정규화(3차 정규화) : 이행종속제거

엔터티에서 일반속성끼리 함수종속이 발생하면 쪼개준다. 

 

이행종속:

직원 ID를 통해 부서 ID를 식별할 수 있고, 부서 ID를 통해 부서명을 식별할 수 있으면 이행종속이라고 함. 

 

결정자(직원ID) -> 종속자(나머지 컬럼들) //완전함수종속! 2NF 만족

 

그런데 나머지 일반 컬럼중에서 결정자(부서ID) -> 종속자(부서명) 이 발생했음

이걸 쪼개줘야 함. 방법은 2차 정규화에서 했던 방식처럼 동일


반정규화(=역정규화)도 알아보자 (현재 시험 범위에서는 빠진것)

: 정규화한 데이터를 다시 합쳐서 중복되게 하거나 통합, 분리 등을 수행하는 모델링 방식

 

1. 테이블 반정규화 (테이블 병합, 테이블 분할, 테이블 추가 등)

2. 컬럼 반정규화 (중복컬럼, 파생컬럼, 이력테이블 컬럼 추가 등)

3. 관계 반정규화 (중복관계 추가)

 

정규화 vs 반정규화? = 성능 향상을 위해 진행함(조회를 할 경우 대부분 정규화 한 상태가 좋지만, 반정규화 상태에서도 좋을 수도 있음)

비정규화 상태 -> 정규화한 정규형 상태

 

입력, 수정, 삭제시 정규화한 상태가 무조건 좋음


반정규화 대상 조사 방법(실무에서는 반정규화를 거의 안함)

 

(반정규화는 데이터의 무결성을 깰 위험이 있다. 그래서 가급적 다른 방법을 생각해보고 안되겠다 싶을때 한다. )

1. 반정규화가 필요한 대상을 찾아본다. 

2. 다른 방법이 없는지 검토해본다. 

3. 달리 방법이 없다면 반정규화를 적용한다.

  • 1. 테이블 반정규화 (테이블 병합, 테이블 분할, 테이블 추가 등)
  • 2. 컬럼 반정규화 (중복컬럼, 파생컬럼, 이력테이블 컬럼 추가 등)
  • 3. 관계 반정규화 (중복관계 추가)

컬럼 반정규화

* 종류가 많으므로 대표적인 예시만 몇 개 소개한다. 

 

(1) 중복컬럼 추가 

  • 테이블에 중복되는 컬럼을 추가해 조인을 감소시킨다. 

 

두 엔티티 중에서 일부만 수정할 경우 데이터의 무결성이 깨질 위험이 있음, 따라서 반정규화는 거의 하지 않음

 

https://www.acmicpc.net/problem/12933

 

문제설명

문제 해결 방법

1. quack이 끝나기전에 q가 나오면 다른 오리가 하나 더 있는 것으로 침 

2. 리스트에 오리가 발견될 때마다 0의 값을 추가해줌

3. quack을 문자마다 0, 1, 2, 3, 4로 표기함.  즉, 오리가 quack을 완성할수록 하나의 인덱스의 값은 0에서 4까지 1씩 증가함

4. 리스트에서 제일먼저 k까지 울은 오리의 index를 따로 다른 리스트를 만들어서 오리를 순서대로 줄세워둠 

5. 최근에 k까지 울은 오리를 먼저 뽑아서 (스택 스타일) q를 먼저 줌(해당 인덱스에 0으로 갱신) = 먼저 울게 해준다.

6. 정상적으로 울지 않는 것에 대해서는 예외처리를 통해 처리하고, -1을 출력함. 

 

코드 구현

# 울음 소리를 한 번 또는 그 이상 연속해서 내는 것

# quack이 끝나기전에 q가 나오면 다른 마리인 것.
# quack이 완벽하게 끝나고 또 quack이 완벽하게 끝나면 한마리로 침

tmp = []

s = input()

waitList=[]

check = 0

for i in s:
    if i == 'q':
        if waitList:
            where = waitList.pop()
            tmp[where] = 0
        else:
            tmp.append(0)
    elif i == 'u':
        try: 
            where = tmp.index(0)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'a':
        try: 
            where = tmp.index(1)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'c':
        try: 
            where = tmp.index(2)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
    elif i == 'k':
        try: 
            where = tmp.index(3)
        except ValueError: 
            check = 1
            break
        tmp[where]+=1
        waitList.append(where)
result = 0
if check ==1:
    print(-1)
else:
    for i in tmp:
        if i == 4:
            result +=1  
        else:
            print(-1)
            check = 1
            break
if check !=1:
    print(result)

 

시간/공간 복잡도

O(N)

 

 

최적화 및 개선

따로 하지 않음.

 

어려웠던 점

리스트에서 특정 값을 통해 index를 구할때, index()함수만 쓸 줄 알았다. 그리고 그 함수가 찾고자 하는 값을 못찾을때 -1을 반환하기 보다는 ValueError를 발생시킬줄 몰랐다. 찾아보니 find()함수가 문자열에서 찾고자 하는 값을 못찾을때 -1을 반환했다. 

 

하지만 find()함수를 사용하지 않았다. quack 우는 것을 숫자로 표기해서 문제푸는게 넘 편한데 다시 문자열로 변환할 필요를 못느꼈다. 

 

처음에 문제의 감을 못잡아서 문자열 앞에서부터 quack을 지워갈 생각을 했다. ㅎ; 

 

코딩테스트 문제 풀면서 예외처리문을 처음 사용해본것 같다. 사용법에 대해서 잘 숙지하고 있어야겠다. 

 

코드에 중복되는 부분이 많아서 함수로 표현을 하면 좋을것 같았다. 함수로 코드를 짜버릇 해야겠다. 

[시험 구성]

 

1과목 : 10문제 (실무에서도 중요함, 암튼 중요함, 이론+ 암기성향이 강함= <이해>)

2과목 : 40문제 

 

[과락 기준]

 

과락 => 과목당 40% 이상

== 1과목 최소 4문제는 맞아야함.

 

[과목별 주제]

 

1과목 주제: 데이터 모델링의 이해

1. 엔터티(ENTITY) 이해하기

2. 속성

3. 관계

4. 식별자

5. 데이터 모델의 이해 

 

2과목 주제: 데이터 모델과 SQL

1. 정규화

2. 관계와 조인의 이해

3. 모델이 표현하는 트랜잭션의 이해

4. Null 속성의 이해

5. 본질식별자 vs 인조식별자 

 

[필요 공부량]

강의 2~3번 정독을 요함(?)

 

[관계(Relationship) 이해하기]

엔터티 내의 인스턴스들 간에 서로 논리적인 연관성이 있는 상태 

ex=> 직원은 부서에 소속되고, 부서는 직원을 소유함

 

지금 사용하는 데이터베이스는 대부분 관계형 데이터베이스임.

 

엔터티끼리의 관계를 통해 데이터의 의미를 설정.

 

엔터티 간에 같은 속성으로 인해 연결이 가능하면 관계임

 

 

관계의 분류  - 존재/행위 (시험 목적으로만 이해하면 됨)

 

존재에 의한 관계  직원 - 부서 (소속되다/보유하다)

행위에 의한 관계  고객 - 상품 (주문하다/주문되다)

 

<아래의 내용만 간단하게 암기 >

-ERD는 존재/행위 등 관계를 위처럼 똑같이 표시한다. 

-UML 클래스다이어그램은 

:연관관계(존재)는 실선으로 표기하고

의존관계(행위)는 점선으로 표시한다. 

 

다음중 관계의 분류에 대해 올바르지 않는 것은?

erd는 존재의 경우 점선으로 한다.. 이정도만 나옴

 


관계를 표시하는 방법 

 

SQLD는 uml은 안나오고, erd는 나옴. IE가 시험에 대부분 나옴 Borker는 시험에 안나오지만 둘의 차이점은 시험에 나옴

 

관계명(Membership)

 

관계차수(Cardinality/Degree)

 

 

까치발은 하나의 부서는 여러 직원을 포함하고 있다는 의미임

 

 

관계선택사양(Optionality)

 

 

 

중간에 놓침

 

코드성, 통계성이란? 

 

코드성: 값을 코드형식으로 저장 => 오히려 복잡해질 수 있어서 관계를 이어주지 않음

통계성: 월별로 매출액 저장

 

 

네가지 사지선다로 나옴. (말장난) 노란거만 외우면됨

 


[04. 식별자] [05. 데이터 모델 이해하기]

 

데이터 모델링이란?

 

 

개발 순서 : 기획(요구사항)->설계->개발->테스트->운영이라는 환경에 올림

 

모델링은 설계단계임

그러나 모델링 결과물은 개발 순서 전반에 걸쳐서 다씀. 

 

 

개발자는 현업 관련 지식을 잘 모름. 

그냥 업무 중심적으로만 알뿐,

 

전사적: 기업 입장에서 본다. 

DBMS 독립적: 데이터베이스를 쉽게 쓸 수 있게 하는 관리 시스템과 독립적으로 저 그림을 가지고 있으면 어떻게든 쓸 수 있음

 

 

릴레이션과 릴레이션쉽은 다르다!!!!!!!!

 

관계를 그림으로 표현한 것을 ERD라고 함.

 

그리는 순서도 시험에 나왔음

 

 

 

 

선택 참여는 없을 수도 있음

 

 


[논리적 데이터 모델링]

 

 

오라클에서 만든건 오라클에서만 쓸 수 있다. 

논리적 데이터 모델링을 할 때 정규화를 수행한다. 

 

그리는 방법!!

 

 

식별자-> 인스턴스를 유일하게 구분할 수 있는 속성의 집합 

 

 

분석 -> 설계 -> 개발 -> 테스트 -> 운영 

 

에서 설계가 진짜 중요함

 

 

 

 

 

 


[데이터베이스 3단계 구조]

 

'시험 관점에서 종류와 특징만 암기하면 된다. '

     v 종류                            v 특징
(1)외부(External) 스키마: 여러 사용자 각각의 관점

(2)개념(Conceptual) 스키마: (여러사용자의 전체적인 관점)통합적, 조직 전체의 DB관점

(3)내부(Internal)스키마: 데이터 물리 저장 구조 표현

 

*각 스키마는 독립성을 가짐(뒷장 예시)

 

 

  • A, B, C가 보는 관점에 따라 다름 = 외부 스키마
  • 외부 스키마와 개념 스키마의 독립성
    • 개념 스키마가 바뀌어도 외부 스키마에서는 확인이 어려운 것을 의미함. 

 


[식별자(Identifiers)란?]

엔티티 내 유일하게 인스턴스를 식별할 수 있는 속성의 집합

식별자 = primary key


식별자 분류 (*식별자의 종류는 다양하게 존재한다. )

1. 대표성여부: 주식별자(직원ID) vs 보조식별자(주민등록번호)

2. 스스로생성여부(자생여부) : 내부식별자 vs 외부식별자 (엔터티안에있는 식별자인지 아니면 외부에서 가져온 것인지(FK=외래키)

3. 단일속성여부 : 단일식별자 vs 복합식별자 (식별자가 1개냐? 그 이상이냐?- 그림 속 직원 연락처 테이블은 식별자 2개를 조합했음)

4. 대체여부 : 본질식별자 vs 인조식별자
(본질식별자: 부서명, 인조식별자: 부서명이 너무 길 경우 D002 이런식으로 코드 따자~(사람들이 편의를 위해서 임의로 코드같은 걸 만든 것임))

 


주식별자 도출기준

1. 업무에서 자주 쓰는 속성일 것 (주민번호는 실무 입장에서 암호화가 되어야함=식별자로 쓰기 어려움)

2. 명칭, 이름 등은 피할 것 (중복이 될 수 있음)

3. 속성의 수가 많지 않을 것 (속성이 최소의 개수로 이루어져야함)

 

주식별자 특징

 

1. 유일성: 인스턴스를 유일하게 식별하기

2. 최소성: 속성의 수가 많지 않기

3. 불변성: 가급적 변하지 않기 (실무에서 변할수는 있으나, 그럴일은 없음)

4. 존재성: 값이 꼭 입력되기

 

 

 

저 까만 통은 하드디스크임 

 

 

 

데이터 모델

: 현실세계의 대상을 추상화, 단순화, 명확화 하여 데이터베이스로 표현하는 것. 

 

 

 

<데이터 모델링>

만들고 싶다.=> 단순 설계도 그리자=> 좀 더 상세한 설계도 그리자=> 실제 구축해보자 => 만들었다. 

 

요구 사항 접수 => 념적 데이터 모델링 => 리적 데이터 모델링 => 릴적 데이터 모델링 => 데이터페이스에 저장할 수 있게 세팅 

 

개념적 데이터 모델링 : 그림으로 표현(엔티티, 관계, 속성 등이 이 안에 들어가있음)


[엔티티 이해하기]

 

엔티티(ENTITY, 개체)란?

: 업무에 필요한 정보를 저장/관리하기 위한 집합적인 명사 개념

ex)

직원 관리 프로그램 만들자=>직원 정보 필요. 하나의 집합으로 표현하면(단순화/추상화/명확화)  엔티티 => "직원" 이 됨.

 

인스턴스(INSTANCE)란?

: 엔터티 집합 내에 존재하는 개별적인 대상 

ex)

직원이라는 엔티티 안에 있는 직원 A= 인스턴스

직원이라는 엔티티 안에 있는 직원 B= 인스턴스

 

엔터티의 특징

 

1. 반드시 업무에서 필요한 대상이고 업무에 사용될 것

2. 유일한 식별자로 식별이 가능할 것

3. 인스턴스가 2개 이상일 것(데이터가 두개 이상)

4. 속성이 반드시 2개 이상 존재할 것

5. 관계가 하나 이상 존재할 것 (단 코드성, 통계성은 생략 가능)

 

엔터티의 분류(유무형에 따라 분류) - bold체 모두 암기해야함 

 

시험에서는 이런 종류가 있다 정도로만 물어볼 것임

 

유형 엔터티: 물리적 형태가 있는 엔터티 ex) 직원, 주류, 강사, 고객

개념 엔터티: 물리적 형태가 없는 엔터티 ex) 부서, 과목, 계급

사건 엔터티: 업무 수행 중에 (제일 많이 발생) 발생하는 엔터티 ex) 직원, 강의, 매출, 주문, 상담

 

 

엔터티의 분류(발생시점에 따라 분류) - bold체 모두 암기해야함 

 

기본/키 엔터티: 본래 업무에 존재하는 정보 독립 생성 가능, 주식별자 보유 ex) 직원, 고객, 상품, 부서 

중심 엔터티: 기본 엔터티로부터 발생, 업무에 있어 중심 역할 ex) 주문, 매출, 계약, 대출 

행위 엔터티: 2개 이상 엔터티로부터 발생 ex) 주문이력

 

엔터티의 명명(naming) 규칙

1. 가능한 협업 용어를 쓴다. ex) 사람-> 고객, 전봇대 -> 전주

2. 가능하면 약어를 사용하지 않는다. ex) 일별매출정보-> 일매목 xxxxx

3. 단수 명사를 사용한다. 

4. 엔터티 이름은 유일해야 한다. 

5. 엔터티 생성 의미대로 이름을 부여한다. ex)연락처목록 -> 직원연락처목록? 고객연락처목록? (구체적으로 작성해라)

 


[속성(ATTRIBUTE) 이해하기]

 

: 업무상 관리하기 위해 의미적으로는 더는 분리되지 않는 최소의 데이터 단위,

엔터티가 가지는 공통적인 특징을 표현함 

우리가 관리하고자 하는 정보가 됨.

 

엔터티, 인스턴스, 속성의 관계

1. 하나의 엔터티는 2개 이상의 인스턴스를 가진다. 

2. 하나의 엔터티는 2개 이상의 속성을 가진다. (아니면 데이터베이스 쓰는 의미 없음)

3. 속성은 각 인스턴스를 설명해줄 수 있다. 

4. 하나의 속성에는 하나의 속성값만 들어간다. 

 

가로한줄이 인스턴스임.

 

식별자란?

:엔터티 내 유일한 인스턴스를 식별할 수 있는 속성의 집합 ex)직원 id

 

 

속성의 분류(특성에 따른 분류)

 

기본: 업무로부터 추출한 속성으로 제일 많이 발생/ 이름, 주민번호, 직원 ID, 나이, 연봉, 부서명 등

설계: 설계시 규칙화 등이 필요해 만든 속성/ 코드성이나 일련번호, 부서코드 등

파생: 다른 속성들로부터 계산/변형되어 만들어진 속성 / 부서별 연봉합 등 (실무에서 지양함- 데이터 추가될때마다 관리 힘듦) 

 

속성의 분류 ( 구성방식에 따른 분류)

-PK(식별자), FK, 일반속성, 복합속성 

 

속성 명명(Naming) 규칙

1. 가능한 현업 용어를 쓴다. 

2. 가능하면 약어를 사용하지 않는다. 

3. 명사형을 쓰고 서술식이나 수식어 등을 제한한다. ex)오늘 배송된 상품 -> 일배송 상품

4. 가능한 속성 이름은 전체 데이터 모델에서 유일해야 한다. (실무에서 그렇게 지키는거 같진 않...)

 

도메인(DOMAIN) 이란?

: 각 속성이 입력 받을 수 있는 값의 정의 및 범위를 의미함

: 보통 테이블을 만들 떄 각 속성마다 자료형 및 제약조건을 줄 때 결정된다. 

 

ex) 나이는 숫자만 입력받을 수 있고, 0~999까지 입력받는다. 

 


 

 

 

 

 

 

 

+ Recent posts