데이터베이스 설계 단계

  • 커뮤니케이션
    • 사용자의 요구사항 분석
    • 개념적 설계: 분석 결과를 추상화된 표현 방식으로 기술 (개념적 스키마 생성)
      • ex: 개체 관계 모델, 개체관계 다이어그램(ERD), ER스키마
  • DBMS
    • 논리적 설계: 논리적 데이터베이스 구조에 맞는 스키마 생성 (논리적 스키마 생성)
      • 개념적 스키마를 통해 논리적 스키마(테이블 구조도)를 생성
      • 관계형 데이터 모델
    • 물리적 설계: 실제 컴퓨터에 저장되는 방식 설계
      • DBMS를 통해 실제 테이블 저장, 구조 설계, 생성
      • 필드의 데이터 타입, 인덱스, 물리적 스키마 지정

설계 과정의 고려사항

  • 충실성: 모든 데이터를 표현해야 한다.
  • 단순성: 단순하고 이해하기 쉬운 구조로 짜야한다.
  • 중복의 최소화
  • 제약조건의 표현

개체관계 모델: 개념적 설계

  • 개체(Entity)
    • 현실 세계에서 물리적/추상적으로 존재하는 실체 (레코드)
  • 개체집합(Entity Set)
    • 동일한 특성을 갖는 개체들의 모임 (테이블)
      • 강성 개체 집합: 기본키 형성에 필요한 속성을 모두 갖는 개체집합
      • 약성 개체 집합: 기본키 형성에 필요한 속성을 모두는 갖지 못한 개체 집합(독립적으로 존재 할 수 없음), 강성 개체 집합과 일대다 관계로 전체 참여한다.
  • 속성(Attribute)
    • 개체의 특성, 관계형 데이터 모델의 (필드)와 유사
      • (관계형 데이터 모델)필드: 테이블의 컬럼 원자 값만 허용된다.
      • (개체관계 모델)속성: 다중값 속성, 복합 속성 가능

관계와 관계집합

  • 관계: 개체간의 대응성
    • 일대일(one-to-one): 외래키를 추가 하여 구현
    • 일대다(one-to-many): 외래키를 추가 하여 구현
    • 다대일(many-to-one): 외래키를 추가 하여 구현
    • 다대다(many-to-many): 중간 테이블"이나 "연관 테이블"이라고 불리는 새로운 테이블을 만들어 다대다 관계를 두 개의 일대다 관계로 분리
  • 관계집합: 동일한 유형의 관계들의 집

부분키, 구별자

  • 약성 개체집합에서 강성 개체집합의 특정 개체 내에서만 유일한 값을 갖는 속성 집합
  • course 개체집합의 속성
    • course_id, title, credit
  • class 개체집합의 속성
    • year, semester, division, classroom, enroll
  • 특정 course에 대해서만 유일한 값을 갖는 class의 속성: year, semester, division (class 개체 집합의 부분키)
  • 약성 개체집합의 기본키: 약성 개체집합의 부분키 + 강성 개체집합의 기본키

'CS > DataBase' 카테고리의 다른 글

정규화  (0) 2023.05.19
개체 관계  (0) 2023.05.10
물리적 저장 구조와 인덱스  (0) 2023.04.26
데이터베이스 보안  (0) 2023.04.09
무결성과 보안  (1) 2023.04.07

물리적 데이터 베이스

  • 테이블과 레코드들은 HDD에 저장
  • 운영체제가 관리하는 파일 시스템 이용
    • 기본 저장 구조는 파일
    • 입출력 단위는 블록(하나의 테이블에 속)

블록 내 레코드 저장 방식

  • 블록 내에 고정길이로 저장
    • 장점: 처리하기 편함
  • 블록 내에 가변길이로 저장
    • 장점: 사용하는 디스크의 용량을 줄일 수 있음
  • 클러스터링: 자주 검색되는 필드를 기준으로 관련 레코드들을 같은 블록에 저장하는 기법

인덱스

create index<인덱스이름> on <테이블이름>(<필드리스트>)
  • 구조: Map 형태로 (검색키, 주소)로 구성
  • 사용 이유: 파일 내 레코드의 위치를 빨리 찾기 위해 사용
    • 인덱스가 없다면 순차 검색을 통해 찾아야 하므로 속도가 떨어짐
  • 기본키에 대해서는 DBMS가 자동으로 인덱스를 생성시킨다.
  • 단점: 테이블에 레코드를 삽입하고 관련 정보를 인덱스에 갱신해야 한다 즉 인덱스가 많아지면 삽입, 삭제, 수정연산 속도 저하

'CS > DataBase' 카테고리의 다른 글

개체 관계  (0) 2023.05.10
데이터베이스 설계  (0) 2023.04.30
데이터베이스 보안  (0) 2023.04.09
무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01

정의: 권한 없는 사용자의 접근을 막는 것

DBMS 사용권한: 사용자가 특정 객에체 대해 특정 연산을 수행할 수 있는 권한

권한에 따른 사용자 분류

  • 데이터베이스 관리자(DBA)
    • 모든 권한 보유
    • 모든 테이블 생성, 읽기 권한 부여 가능
  • 객체 소유자(owner)
    • 해당 객체에 대한 테이블 생성, 읽기 권한 부여 가능
  • 기타 사용자

오라클에서의 사용자 권한제어

  • 시스템 권한: 사용자의 생성, 테이블 테이블 스페이스의 생성 등과 같이 주로 시스템의 자원을 관리할 수 있는 권한
    • sys, system 관리자 계정은 모든 시스템 권한을 가짐
  • 객체 권한:
    • 해당 객체에 대해 select, insert, delete, updata 등과 같은 DML을 실행할 수 있는 권한

SQL에서의 권한 제어문 GRANT

  • 정의: 권한을 부여하는 명령
  • 형식: grant <권한리스트> on <객체명> to <사용자리스트>
  • 예시: grant select on student to USER1 (USER1에게 student 테이블을 선택(조회) 할 수 있는 권한 제공
  • references 권한: 다른 테이블의 기본키를 외래키로 등록 할 수 있는 권한
  • 모든 사용자들에게 권한 부여: to public (사용자 리스트)
  • 해당 테이블의 모든 권한 부여: all privileges (권한 리스트)
  • ~with grant option: 다른 사용자에게 권한을 부여할 수 있는 권한도 제공

SQL에서의 권한 제거 REVOKE

  • 다른 사용자에게 부여한 권한을 회수하기 위한 명령
  • 형식: revoke <권한리스트> on <객체명> from <사용자리스트>
  • 예시: revoke select on student from kim
  • revoke 된다면 권한을 부여받은 사람이 권한을 부여한 사람도 권한이 회수된다.

롤(ROLE)

  • 권한을 부여할 사용자가 많을 경우 사용
  • 권한을 부여받을 그룹을 생성
  • 형식:
    • grant <롤리스트> to <사용자리스트>
    • revoke <롤리스트> to <사용자리스트>
    • drop roll <롤리스트>
  • 예시: grant employee to USER1, USER2

'CS > DataBase' 카테고리의 다른 글

데이터베이스 설계  (0) 2023.04.30
물리적 저장 구조와 인덱스  (0) 2023.04.26
무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01
SQL 1  (0) 2023.03.24

무결성 제약

  • 데이터가 결점 없이 들어 올 수 있도록 데이터가 갖추어야 할 제약 조건을 말 한다.
  • 데이터를 생성할 때 무결성 제약 조건을 명시함
  • 새로 데이터가 들어올 때 마다 DBMS가 해당 데이터를 바탕으로 자동으로 체크함

 

+테이블

  • Base Table: Base Table은 부모 테이블 또는 마스터 테이블이라고도 불리며, 각 레코드에 대한 고유한 식별자인 기본 키(primary key) 열을 포함하는 데이터베이스 테이블입니다.
  • Device Table: Device Table은 컴퓨터, 프린터 또는 기타 하드웨어와 같은 장비에 대한 정보를 저장하는 데이터베이스 테이블입니다.

 

무결성 제약의 유형

  • 기본 무결성 제약
  • (외래키) 참조 무결성 제약
  • 일반 무결성 제약

 

기본 무결성 제약 조건

  • 형식: constraint <제약식명> primary key (<필드 리스트>)
  • 테이블 안 

  • 테이블 밖

  • 기본키 삭제

  • 기본키는 NULL 값을 가질 수 없으며 동일한 값을 가질 수 없다.
  • 한 테이블에서 기본키의 무결성 제약은 한번 밖에 나올 수 없다.

 

(외래키) 참조 무결성 제약

  • 형식

  • 테이블 안

  • 테이블 밖

  • 외래키 삭제

  • 외래키는 대부분 테이블 바깥에서 선언된다.

 

일반 무결성 제약

  • Not Null: 특정 필드는 NULL 값이 들어오면 안된다.
    • 기본키는 해당 제약이 디폴트로 적용되어 있음
  • unique: 후보키 등록
    • 값의 고유성 보장(중복 값 x)
    • 두 개 이상의 필드에 동시에 설정 가능 (각각의 경우에 대해)
      • ex: 김 영웅, 김(x) 길동 x
  • check: 어떤 필드의 값의 범위를 지정
    • 형식: constraint <제약식명> check (<조건식>)
    • 여러개의 필드를 묶어서 조건을 주는 것 또한 가능

 

  • default: 레코드 삽입시 따로 값이 정해지지 않을 경우 사용될 디폴트 값을 설정할 때 사용
    • 주의점: NULL<values(값,Null)>으로 삽입 될 경우 적용되지 않고 values(값,,)로 삽입해야 해당 디폴트 값이 적용됨

 

무결성 제약 설정의 유의점

  • 지나치게 많은 제약 조건이 있을 경우 많은 오버헤드를 발생시키기 때문에 프로그램 전체의 속도를 감소시킬 수 있음

'CS > DataBase' 카테고리의 다른 글

물리적 저장 구조와 인덱스  (0) 2023.04.26
데이터베이스 보안  (0) 2023.04.09
집계 함수  (0) 2023.04.01
SQL 1  (0) 2023.03.24
관계 대수  (1) 2023.03.17
  • 순서
    1. where (출력할 레코드들)
    2. group by (레코드들 끼리 그룹을 짖기)
    3. having (group에대한 조건)
    4. order by (결과의 출력 순서)

COUNT

  • 형식: count( distinct <필드이름> )
  • 필드 이름 대신 *가 사용되면 레코드의 개수를 계산
  • distinct는 중복을 제거하고 숫자를 보여주라는 명령
    • 반대값은 all이 존재 (디폴트 값)

SUM

  • 형식: sum(<필드 이름>)
  • 필드값의 합계를 반

MIN, MAX

  • 형식: max(<필드 이름>), min(<필드 이름>)
  • 최대 최소 필드 값을 반
  • 필드와 집계함수는 같이 사용 할 수 없다.

GROUP BY

  • 형식: group by <필드 리스트>
  • select 절에 집계 함수가 사용될 경우 다른 필드는 select 절에 사용할 수가 없음
  • 그룹핑 후 집계함수 사용시 활용
  • group by 절의 필드명과 집계함수를 같이 사용 할 수 있게 됨

HAVING

  • 그룹에 대한 조건을 명시할 때 사용
  • 형식: having 집계함수 조건

널 처리

  • 널을 검색하는 방법
  • 형식: <필드 이름> is null, <필드 이름> is not null
    • where grade <> ‘A+’ → A+가 아닌 학생들을 검

중첩 질의

  • SQL문 안에 SQL문이 중첩되어 사용하는 질의
  • 내부질의, 부질의: 내부에 포함된 SQL문
  • 외부질의: 부 질의를 내부적으로 갖는 SQL문
  • 종류
    • in, not in
    • some, all
    • exists, not exists

  • 기존 테이블들로부터 생성되는 가상의 테이블
  • 기존의 테이블들을 조합하여 사용자에게 실제로 존재하는 테이블인 것처럼 보이게 함
    • 이렇게 만들어진 가상의 테이블을 사용하여 검색이 가능
  • 형식: create or replace view <뷰이름> as <select문> from 원본 테이블 이름 where 조건문
    • 마지막: with read only (검색 전용으로 만들기)
  • or replace를 생략해도 되나 추가하여 사용 할 경우 기존에 뷰 이름과 같은 뷰가 이미 존재하는 경우 기존 뷰를 지우고 새로 생성
  • 대부분의 DBMS에서 사용자 계정에는 뷰 생성 권한이 부여되지 않음
    • grand create view to <사용자 계정>: 권한 부여
  • 검색용으로만 사용하고 여기에 직접 데이터를 넣는건 바람직 하지 않다.
    • 여러 베이스 뷰의 요소가 짬뽕되어 있어 굉장히 위험하기 때문

'CS > DataBase' 카테고리의 다른 글

데이터베이스 보안  (0) 2023.04.09
무결성과 보안  (1) 2023.04.07
SQL 1  (0) 2023.03.24
관계 대수  (1) 2023.03.17
Key  (0) 2023.03.11

배경

  • 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음
  • SQL은 자연어와 유사하고 비절차적 언어이므로 사용하기 용이함
  • SQL로 풀 수 없는 문제를 프로그래밍을 통해 풀 수 가 있음
  • 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어

SQL 기본 명령어

  • 데이터 정의 언어(data definition language) DDL: CREATE, ALTER, DROP
  • 데이터 조작 언어(data manipulation language) DML: SELECT, INSERT, DELETE, UPDATE
  • 데이터 제어 언어(data control language) DCL: GRANT, REVOKE, COMMIT, ROLLBACK

DDL VS DML

  • 둘다 SQL 언어
  • 테이블을 정의하는 것을 DDL (데이터 생성)
    • SQL 문을 입력시 자동으로 commit 명령이 들어감(저장)된
    • rollback이 불가능
  • 테이블을 넣고 삽입 삭제 하는 것을 DML (데이터 처리)
    • SQL 문 입력 후 exit 나 commit 을 입력해야  해당 데이터가 저장됨
    • rollback시 취소 가능

필드의 Data type 종류 (Oracle)

  • 문자
    • char(n): (길이가 n인 고정 길이의 문자열)
    • varchar2(n): (길이가 n인 가변 길이의 문자열)
  • 숫자
    • int(정수), float(실수)
    • number(6): (10진수 6자리 자연수 0~999999)
    • number(6,2): (10진수 6자리 중 소수점 자리 2개 0~9999.99)
      • 사용 이유: 필요한 메모리 공간을 절약하기 위해서 int 로 선언시 number(38) 로 처리되는데 이는 데이터의 범위에 비해 공간적으로 과도하게 잡아먹는 경우가 있음
  • 날짜 시간
    • data: 년월일
    • timestamp: 시분초

테이블 생성

create table member(
	id int not null ato_increment,
    name varchar(10) not null,
    passwd varchar(50) not null,
    primary key(id)
)
  • 형식 create table <테이블이름> (<필드리스트>)

  • not null은 해당 필드에 널을 허용하지 않는다는 것을 의미함

기본키, 외래키 설정

  • pk_department: 제약식의 이름 (not null 이 디폴트로 설정 됨)
    • 어느 테이블에서 작업을 할때 에러가 발생했는지 알기 쉽기 때문에 사용
  • 외래키는 반드시 프라이머리 키(기본 키)로 참조하여야 함
    • 기본키와 외래키는 이름이 같을 필요는 없다.
    • 외래키는 테이블과 테이블 사이의 조인 연산을 할때 이용되기 때문에 필요 (관계 정의 요소)
  • 기본키, 외래키 관련 주의사항
    • 외래키를 필드로 갖는 테이블을 생성 할 때
      • 외래키가 참조하는 테이블을 먼저 생성 해야 한다.
    • 만일 외래키가 참조하는 테이블을 먼저 생성하지 않으면 "ORA-00942" 테이블 또는 뷰가 존재하지 않습니다." 라는 오류가 발생하게 된다.
    • 테이블을 삭제할 때도 같은 문제가 발생함
      • 외래키를 먼져 해제하거나 제거 하여 관계를 끊은 다음에 삭제를 진행해야 테이블 간의 일관성을 유지 할 수 있다.

테이블 추가와 삭제

  • 형식 alter table <테이블이름> add <추가할필드>
  • 새로운 필드가 생성시 기존의 레코드 값들은 null 값으로 배치가 된다.

  • 형식 alter table <테이블이름> drop column <삭제할필드>

레코드 삽입

  • 형식: insert into <테이블이름> (<필드리스트>) values (<값리스트>)
    • <필드리스트>: 삽입에 사용될 테이블의 필드들
    • <값리스트>: <필드리스트>의 순서에 맞춰 삽입될 값
    • <필드리스트>에 나열되지 않은 필드에 대해서는 널값이 입력됨
    • <필드리스트>를 생략할 경우 <값리스트>에는 테이블을 생성할 때 나열한 필드의 순서에 맞춰서 값을 나열
    • 테이블의 필드 중 생략된 필드에는 널이 입력됨
      • 단 not null이 설정된 필드가 있을 경우 해당 필드는 insert문에서 생략 할 수 없음

레코드 수정

  • <수정내역>
    • 대상 테이블의 필드에 들어가는 값을 수정하기위한 산술직
    • ,을 이용하여 여러 필드에 대한 수정 내역을 지정가능
  • <조건>
    • 대상이 되는 레코드에 대한 조건을 기술
    • 관계대수에서 선택 연산의 조건식과 같은 의미
    • 테이블의 모든 레코드에 대해 수정을 적용하려면 where 절을 생략

레코드 삭제

  • where절이 생략되면 테이블에서 모든 레코드를 삭제
    • DDL의 drop table과의 차이점: delete 문을 이용하여 테이블의 모든 레코드를 삭제하더라도 테이블은 삭제 되지 않음
  • 외래키로 참조되는 필드를 가지고 있는 테이블에서 레코드를 삭제 할 수 없음

'CS > DataBase' 카테고리의 다른 글

무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01
관계 대수  (1) 2023.03.17
Key  (0) 2023.03.11
릴레이션  (0) 2023.03.11

질의어

  • 삽입, 삭제, 수정, 검색 등의 데이터 조작을 위한 연산을 표현하기 위한 언어
  • 절차적 언어: 일련의 절차를 명시해야 하는 언어
  • 비절차적 언어: 수행 절차를 기술하지 않아도 사용가가 원하는 결과만을 형식적으로 명시하는 언어 실질적인 수행절차는 시스템 내부에서 처리 (블랙박스)

관계형 데이터베이스에서의 대표적 질의어

  • 관계 대수
    • 비절차적 언어
    • 관계 해석 보다는 더 절차적인 언어
    • 수학에서의 수식구조와 유사
      • 피연산자: 테이블
      • 연산자: 단항, 이항 연산자
  • 관계 해석
    • 비절차적 언어

관계대수의 연산 종류

  • 기본 연산
    • 선택 연산: 하나의 테이블에서 주어진 조건을 만족하는 레코드들을 검색하는 기능
      • 형식: σ조건식(테이블이름)
      • 교환법칙이 성립한다.
    • 추출 연산: 사용자가 원하는 필드만을 결과로 출력하는 연산
      • 형식: π필드리스트(테이블이름)
      • 교환법칙이 성립되지 않는다.
    • 재명명 연산: 테이블에 이름을 부여하거나 변경하는 연산
      • 형식: ρ테이블명(테이블명)
    • 집합 연산: 수학적 집합 이론에서 정의된 연산
      • 조건: 집합 연산에 피연산자인 두개의 테이블은 서로 호환이 가능해야 함
        • 두 피연산자의 차수와 필드 이름이 같아야함
        • 같은 이름의 필드들이라 하더라도 도메인이 일치해야 함
      • 합집합
      • 차집합
      • 카티션 프로덕트: 두 개의 테이블에서 각각의 레코드들을 서로 결합하여 하나의 레코드로 구성하면서 가능한 모든 조합의 레코드들로 테이블을 생성
        • 형식: 테이블 x 테이블
        • 두 개 이상의 테이블이 필요한 질의의 표현이 가능
        • 교환법칙과 결합법칙이 성립함
      • 교집합
  • 추가연산
    • 조인
    • 자연 조인
    • 외부 조인
    • 지정 연산
  • 관계대수 연산의 결과는 임시 테이블의 형태로 보여진다. (결과가 저장되지는 않음) 따라서 연산의 중첩이 가능함
  • null 처리: 조건식에서 배제

조인(join)

  • 두 테이블로 부터 특정 조건을 만족하는 레코드들을 하나의 레코드로 결합하는 연산
  • 카티션 프로덕트는 모든 가능한 조합에 의해 레코드들을 생성하지만 조인은 특정 조건을 만족하는 레코드만을 선택
  • 세타 조인이라고 함
  • 형식: <테이블이름1>⋈(조건식)<테이블이름2>
    • 조인 조건은 필드간의 동등비교(=)가 대부분이며 이를 동등조인 이라 함
  • 다음과 같이 카티션 프로덕트로 표현가능

  • ex: 학교와 학과에 소속된 같은 이름의 정보 검색

자연 조인

  • 서로 다른 테이블에서 같은 필드명을 가지는 두개의 필드가 같은 값을 같는 필드를 하나 제거하여 합쳐 단순히 표현한 연산
  • 형식: <테이블이름1>⋈<테이블이름2>
  • 만약 공통되는 필드가 없다면 카티션 프로덕트와 같다.

외부 조인

  • 조인 조건에 만족되지 않는 레코드까지 검색 결과에 포함시키기 위한 방법(필드 안에 레코드 내용이 동일 하지 않은 경우를 대비)
  • 서로 매치되지 않는 필드에 대해서는 NULL을 입력함
  • 종류
    • 왼쪽 외부조인 (왼쪽의 중복되지 않는 요소 포함)
    • 오른쪽 외부조인 (오른쪽의 중복되지 않는 요소 포함)
    • 완전 외부조인 (양쪽의 중복되지 않는 요소 포함)

지정 연산

  • 복잡한 질의를 여러 개의 질의로 분리하거나 중간 결과에 이름을 부여
  • 최종 질의를 결과에 이름을 부여
  • 연산 기호로는 ←를 사용
  • ex: student 테이블에서 3학년인 학생을 선택해서 그 결과 테이블을 junior이라는 이름으로 지정해라
    • junior ←σ(조건) <테이블명>

'CS > DataBase' 카테고리의 다른 글

집계 함수  (0) 2023.04.01
SQL 1  (0) 2023.03.24
Key  (0) 2023.03.11
릴레이션  (0) 2023.03.11
데이터와 데이터베이스  (1) 2023.03.03

Key

  • 필요이유: 레코드간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용해야 하기 때문
  • 레코드를 구별 하는데 사용할 수 있는 고유한 값을 가진 레코드의 하나의 필드 혹은 복수의 필드(composite key)
  • 시간의 독립적으로 항상 존재해야 함 Time dependent
  • 유일하게 식별을 해야 하기 때문에 NULL값을 가질 수 없음

Key의 3가지 종류

  • 슈퍼키(super key): 아무런 제약 조건 없이 레코드들을 식별할 수 있는 필드의 집합
  • 후보키(candidate key): 최소한의 필드만으로 구성된 키 어떠한 데이터가 들어오고 지워져도 식별이 가능해야 함
  • 기본키(primary key): 후보키 중에서 식별자로 정의한 하나의 키 되도록 하나의 필드로 구성된 후보키를 선정하는 것이 유리함

foreign key

  • 어떤 테이블의 속성이 다른 테이블의 기본Key 값을 가지고 있는 경우
    • 이 점을 이용해서 해당 테이블의 속성에 값이 추가될 때 해당 값이 잘못된 값 인지 아닌지 판별 가능
  • 테이블과 테이블 사이의 관계를 표현하고 설정하는 것이 가능
  • 다른 테이블의 기본Key를 참조하는 필드 집합
  • 두 테이블 스키마 X, Y에 대해 X의 어떤 필드집합 XK가 다음 두 조건을 만족하면 XK는 Y의 기본키인 YK를 참조하는 X의 외래키임
    • XK의 필드들은 테이블 스키마 Y의 기본키 YK와 동일한 도메인(값의 범위)을 가짐
    • X의 각 레코드의 XK값은 Y의 레코드 중 하나의 YK값과 일치하거나 널이 됨
      • 이때 X 레코드의 XK값이 널이 된다는 것은 알지 못하거나 아직 결정되지 않았다는 것을 의미함
    • X: 참조하는 테이블
    • Y: 참조되는 테이블
  • 자신의 테이블을 참조하는 형태의 외래키도 존재 가능

Key

  • 필요이유: 레코드간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용해야 하기 때문
  • 레코드를 구별 하는데 사용할 수 있는 고유한 값을 가진 레코드의 하나의 필드 혹은 복수의 필드(composite key)
  • 시간의 독립적으로 항상 존재해야 함 Time dependent
  • 유일하게 식별을 해야 하기 때문에 NULL값을 가질 수 없음

Key의 3가지 종류

  • 슈퍼키(super key): 아무런 제약 조건 없이 레코드들을 식별할 수 있는 필드의 집합
  • 후보키(candidate key): 최소한의 필드만으로 구성된 키 어떠한 데이터가 들어오고 지워져도 식별이 가능해야 함
  • 기본키(primary key): 후보키 중에서 식별자로 정의한 하나의 키 되도록 하나의 필드로 구성된 후보키를 선정하는 것이 유리함

foreign key

  • 어떤 테이블의 속성이 다른 테이블의 기본Key 값을 가지고 있는 경우
    • 이 점을 이용해서 해당 테이블의 속성에 값이 추가될 때 해당 값이 잘못된 값 인지 아닌지 판별 가능
  • 테이블과 테이블 사이의 관계를 표현하고 설정하는 것이 가능
  • 다른 테이블의 기본Key를 참조하는 필드 집합
  • 두 테이블 스키마 X, Y에 대해 X의 어떤 필드집합 XK가 다음 두 조건을 만족하면 XK는 Y의 기본키인 YK를 참조하는 X의 외래키임
    • XK의 필드들은 테이블 스키마 Y의 기본키 YK와 동일한 도메인(값의 범위)을 가짐
    • X의 각 레코드의 XK값은 Y의 레코드 중 하나의 YK값과 일치하거나 널이 됨
      • 이때 X 레코드의 XK값이 널이 된다는 것은 알지 못하거나 아직 결정되지 않았다는 것을 의미함
    • X: 참조하는 테이블
    • Y: 참조되는 테이블
  • 자신의 테이블을 참조하는 형태의 외래키도 존재 가능

'CS > DataBase' 카테고리의 다른 글

집계 함수  (0) 2023.04.01
SQL 1  (0) 2023.03.24
관계 대수  (1) 2023.03.17
릴레이션  (0) 2023.03.11
데이터와 데이터베이스  (1) 2023.03.03

+ Recent posts