티스토리 뷰
Database와 DBMS
Database: 데이터의 저장소
- 자료를 많이 모은 것
- 아주 많은 데이터를 얼마나 효율적으로 처리하느냐
DBMS: 데이터베이스를 운영하고 관리하는 소프트웨어
- Database Management System
- 데이터베이스를 관리하는 것처럼 보이는 프로그램
- 운영체제가 데이터베이스를 지원하지 않으므로
- 오라클, Mysql, MS-SQL, Access, 큐브리드, 알티베이스
데이터 모델이란?
데이터를 모으고 관리하기 위해서는 데이터화 시키는 작업이 필요하다. 데이터 모델이 이 방법을 알려준다.
- 물리적 혹은 추상적으로 존재하는 현실세계를 단순화되고 정형화된 형태로 표현하는 하나의 방식 또는 규범
- 실제 데이터가 갖는 특성을 살리면서, 목적에 맞게 관심 있는 정보만을 단순화 하여 표현하는 방식
- 데이터에 대한 조작이 가능해야 함
관계형 데이터 모델 relational data model
테이블 형식을 이용하여 데이터들을 정의하고 설명한 모델
- 실세계의 데이터를 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식을 제공
- 테이블을 릴레이션(relation)이라 부름
✨나는 솔로 테이블
이름 | 전화번호 | 주소 | 직업 |
광수 | 010-1234-5678 | 서울 | 소프트웨어 프로그래머 |
영철 | 010-2345-6789 | 부산 | 난초 농사 |
상철 | 010-3456-7891 | 울산 | 한의사 |
속성(attribute) - 필드, 컬럼, 열
- 릴레이션을 구성하는 각 열(column)의 이름
- 속성, 시스템에 필요한 값들
- 예) 주소록 릴레이션을 구성하는 속성
- 이름, 전화번호, 주소, 직업
튜플(tuple) - 레코드, 행
- 릴레이션의 각 행
- 하나의 레코드는 하나의 객체를 표현함.
- 예) 주소록 릴레이션의 한 튜플
- <광수, 010-1234-5678, 서울, 소프트웨어 프로그래머>
✅ 릴레이션은 테이블, 속성은 필드, 튜플은 레코드와 같은 의미
도메인(domain)
- 각 필드에 입력 가능한 값들의 범위
- 원자 값(더 이상 분리되지 않는 값)이어야 함
- 예) 주소록의 도메인
- 이름: 개인 이름들로 구성된 문자열 집합
- 전화번호: "ddd-ddd-dddd"의 형식으로 구성된 문자열의 집합(d는 0부터 9까지의 숫자)
- 주소: 도시를 나타내는 문자열의 집합
널(null)
- 특정 필드에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 필드의 값
- 0이나 공백 문자와는 다름
속성의 값은 Atomic=Simple+Single-valued
테이블 스키마
- 속성의 집합으로 이루어진다.
- 테이블 정의에 따라 만들어진 데이터 구조
- R(A1, A2, ..., AN)
- R: 테이블의 이름
- A1, A2, ..., AN: 필드들의 이름
- 예) 신입생(학번, 주민등록번호, 이름, 주소, 학과명)
- R(A1, A2, ..., AN)
- 차수(degree)
- 테이블 스키마에 정의된 필드의 수
- 차수=1: 단항 테이블(unary relation)
- 차수=2: 이항 테이블(binary relation)
- 차수=n: n항 테이블(n-ary relation)
- 테이블 스키마에 정의된 필드의 수
테이블 인스턴스
- 실체가 만들어진 테이블
- 인스턴스는 계속 바뀔 수 있다.
➕ 스키마는 한 번 정하면 거의 변화가 없지만(기존의 데이터에 영향을 미칠 수 있기 때문에) 인스턴스는 자주 변한다.
테이블의 특성
- 중복된 레코드가 존재하지 않음
- 레코드간의 순서는 의미가 없음
- 테이블 인스턴스는 레코드들의 집합임
- 레코드 내에서 필드의 순서는 의미가 없음
- 테이블 스키마는 필드들의 집합임
키(Keys): 개체를 식별하기 위한 속성의 집합
키의 필요성
- 테이블의 특성에서 살펴보았듯이, 레코드 간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용한다.
- 필드들의 일부로 각 레코드들을 유일하게 식별해낼 수 있는 식별자(identifier)
- 일반적으로 하나의 필드를 지정하여 키로 지정하나, 여러 개의 필드들로 키를 구성할 수 도 있음
- 두 개 이상의 필드로 구성된 키를 복합 키(composite key)라고 함.
슈퍼 키(SK)
- 개체 집합에서 어떤 개체를 유일하게 가리킬 수 있는 하나 이상 속성의 집합
- 예) 학번, 이름 -> 학번과 이름의 집합은 슈퍼키가 될 수 있다.
- 슈퍼키를 정할 때에는 현재 인스턴스만 보고 판단해서는 안된다. 변화 가능성까지 생각하여 키를 정의해야 한다.
- ✅ 속성 하나짜리 슈퍼키는 무조건 후보키가 된다.
후보 키(CK)
- 주어진 슈퍼 키의 속성에서, 속성 하나라도 뺀다면 슈퍼 키가 될 수 없는 경우에 이 속성의 집합을 후보 키라 함
- minimal Super Key
- 식별성에 최소성까지 갖춘 것
- 식별하기 위해 꼭 필요한 속성으로만 구성되어 있는 것
- 예) 학번, 이름 -> 슈퍼키
- 예) 학번 -> 후보키
- 후보키는 기본키가 되기 위한 후보
- 테이블에서 기본키가 되기 위한 후보키를 찾아 그 중에서 한 놈을 기본키로 선택하자.
기본 키(PK)
- 만일 후보 키가 하나뿐이면, 그것이 저절로 일차 키가 된다. 만일 주어진 집합에 후보 키가 둘 이상 있으면, 데이터베이스를 설계할 때 그 가운데 하나를 일차 키로 고르고, 나머지가 후보 키가 된다.
- 후보키가 한개라면 그게 기본키가 되겠지만, 후보키가 여러개라면 그 중에서 하나를 선택하면 된다.
- 기본키를 선택하면 자동으로 Primary 인덱스가 만들어진다.
- 기본 키는 null이 될 수 없다.
외래 키(FK)
- 다른 테이블에서 일차 키인 속성의 집합이 주어진 테이블에 있을 때, 이 속성의 집합을 주어진 테이블에서 외래 키라고 한다.
- 다른 테이블에서 1차키(기본키)인 것이 이 테이블에 있으면 외래키가 되는 것이다!
- 외래 키를 구분하는 기준은 다른 테이블에서 1차키이면 외래키가 된다.
- 외래 키는 null이 될 수는 있다.
- ✅ 휴대폰 번호는 슈퍼키가 될 수 없다!
- null이 될 수 있는 가능성이 있으므로
- ✅ 휴대폰 번호는 슈퍼키가 될 수 없다!
슈퍼 키와 후보 키 찾아보기
속성 집합 : {학번, 이름, 주민등록번호, 학과번호, 휴대폰번호, 학년)
- {학번, 이름} -> c1과 c2가 모두 수퍼키가 아니어야 후보키가 된다.
- c1: {학번} -> 수퍼키 o
- c2: {이름} -> 수퍼키 x
- c1으로 인해 {학번, 이름}은 후보키가 될 수 없다.
속성 집합 : {학번, 과목번호, 학점}
- {학번} -> 수퍼키 x, 한 학생이 여러 과목 수강 가능하므로
- 만약 한 학생이 한 과목만 신청할 수 있다면 가능
- {과목번호} -> 수퍼키 x, 여러 학생이 수강 가능하므로
- 만약 1:1 과외이면 가능
- {학점} -> 수퍼키 x, 같은 학점이 여러명에게 갈 수 있으므로
- {학번, 과목번호} -> 수퍼키 o
- 이번 학기만 한정, 다른 학기도 포함 시 재수강도 되므로 -> 이 경우 학년, 학번도 포함해야 한다.
- {학번, 과목번호} -> 후보키 o
- {학번} -> 수퍼키 x
- {과목번호} -> 수퍼키 x
- 모든 인스턴스는 수퍼키를 가진다.
- 모든 속성 집합은 레코드의 집합이므로
- {학번, 과목번호, 학점} -> 후보키 x, 학점 제외해도 수퍼키가 되므로
- 학생
- 학번, 이름, 주민등록번호, 학과번호, 휴대폰번호, 학년
- SK인가?
- 학번 O
- 이름 X
- 학번, 이름 O
- 휴대폰번호 X
- CK인가?
- 학번 O
- 학번, 이름 X
- 다른 CK
- 수강
- 학번, 과목번호, 학점
- SK인가?
- 학번 X
- 과목번호 X
- 학점 X
- 학번, 과목번호 O
- CK인가?
- 학번, 과목번호 O
- 다른 CK
학생 테이블, 수강 테이블, 학과 테이블에서 외래키 찾기
- 수강 테이블의 학번은 학생테이블에서 후보키이므로 외래키가 될 수 있다.
- 학생 테이블의 학과번호는 학과 테이블에서 후보키가 될 수 있으므로 아마도 외래키일 가능성이 높다.
- 수강 테이블의 과목번호도 외래키일 가능성이 높다.
- 외래키는 다른 테이블을 참조하기 위해 사용되므로 참조키라고도 불린다.
학생 테이블(학번, 주민등록번호, 이름, 주소, 학년, 학과번호)
학과 테이블(학과번호, 학과명, 과사무실)
- 학생 테이블에서 학과번호가 930인 레코드를 삽입할 수 있는가?
- 참조 무결성을 깨므로 삽입할 수 없다.
- 테이블을 만들 때, 학과 테이블을 만들고 학생 테이블을 만들어야 한다.
관계형 데이터베이스
- 관계형 데이터 모델에 기반하여 하나 이상의 테이블로 실세계를 표현한 데이터베이스
- 구조
- 데이터베이스 스키마(database schema): 테이블 스키마의 집합
- 데이터베이스 인스턴스(database instance): 테이블 스키마들에 대한 테이블 인스턴스의 집합
'CS > 인터넷DB응용' 카테고리의 다른 글
[인터넷DB응용] PL-SQL - 2 (0) | 2023.04.17 |
---|---|
[인터넷DB응용] PL-SQL - 1 (0) | 2023.04.16 |
[인터넷DB응용] SQL 활용 - 3 (0) | 2023.04.14 |
[인터넷DB응용] SQL 활용 - 2 (0) | 2023.04.11 |
[인터넷DB응용] SQL 활용 - 1 (0) | 2023.04.11 |