뷰뷰는 일종의 테이블이다. 하지만 그 스키마와 데이터가 저장되는 것이 아니라, 뷰 정의에 따라 계산된다.따라서 이름 그대로 한 테이블에 대한 '뷰', 관점을 저장하는 것과 같다. 뷰는 다음과 같이 생성한다.CREATE VIEW YoungActiveStudents(name, grade) AS SELECT S.name, E.grade FROM Students S, Enrolled E WHERE S.sid = E.sid AND S.age > 21 AS 절 이후에 이 뷰의 정의를 SQL 형식으로 적으면 된다.그래서 어떻게보면 뷰는 일종의 함수처럼 생각하여 그때 그때 계산하는 값으로 볼 수 있다. 뷰는 기본 테이블(데이터베이스에 저장된 실제 테이블)처럼 ..
이번 글에서는 개념적 데이터베이스 설계를 통해 작성한 ERD를 관계 모델(테이블)로 구현해본다. 엔티티 셋엔티티 셋은 테이블로 만든다. 그림과 같은 엔티티 셋을 테이블로 만든다면 아래와 같이 SQL을 작성할 수 있다. CREATE TABLE Employees ( ssn char(11), name char(20), lot integer, PRIMARY KEY (ssn)); 관계 집합 (relationship set)이진 관계관계 집합은 하나의 테이블로 만들 수 있다.이때 관계집합은 자신이 갖는 어트리뷰트 외에, 관계를 맺는 두 엔티티 셋의 PK 를 FK로 가져야 한다.(그리고 두 엔티티 셋의 PK 조합은 관계 집합의 슈퍼키가 된다.) 그림과 같은 ERD가 있을 때, Wo..
지난 글에서 정리한 것까지는 데이터베이스를 개념적으로 설계하는 방법을 다루어보았다. (conceptual design)이제 이번 글부터는 ERD를 통해 개념적으로 설계한 데이터베이스를 논리적으로 설계해보고자 한다.즉, SQL을 사용하여 엔티티 셋과 관계 셋을 실제 데이터베이스 테이블로 만들어보려고 한다.그에 앞서 이번 글에서는 먼저 데이터베이스의 논리적 설계를 위한 Relational Model 의 기본 개념들을 간단하게 정리해본다. Relation관계형 데이터베이스 (relational database) 는 relation의 집합으로 이루어져 있다.(그래서 영어 이름이 relational database 라고 생각한다. 한국어로는 relationship과 따로 구분짓지 않고 관계라고 하지만..) re..
ERD를 사용하여 개념적 데이터베이스 설계를 시작해보자.요구사항을 기반으로 개념적 데이터베이스를 설계하다보면 다양한 선택지를 놓고 고민하게 된다. 어떤 개념을 엔티티로 모델링할지, 속성으로 모델링할지 고민할 수 있고,엔티티와 관계 중 어떤 형태로 모델링할지 고민할 수도 있고,관계들을 구분하는데 있어서 이진 관계, 삼진 관계, 집단화 중 어떤 것을 사용할 지 고민할 수도 있다. 또한 ER 모델을 설계할 때는 데이터에 담긴 여러가지 의미(비즈니스 로직 등)를 함께 나타내도록 설계해야 하므로 다양한 제약조건을 걸게 되는데, 내가 어떤 형태로 ERD를 그리냐에 따라 비즈니스 로직에 맞는 제약조건을 걸 수 없게 되기도 한다. 이제 다양한 예시 상황을 보면서 어떤 개념적 데이터베이스 설계를 취할지 고민해보자. E..
같은 엔티티 집합 속 다른 역할 관계 엔티티가 관계를 맺을 때는 꼭 다른 엔티티 셋에 있는 엔티티끼리 관계를 맺지 않아도 괜찮다.이 그림은 같은 employees 엔티티 셋 안에서 상사와 부하 직원 사이의 보고(reports to) 관계를 나타낸다.이때 '보고 관계' 테이블에는 누가 상사이고 누가 부하직원인지 역할(role)을 명시해야하므로, 두 employees 의 ssn을 각각 상급자의 ssn, 부하직원의 ssn으로 재정의한 어트리뷰트를 갖는다. 약개체 (Weak Entities)약개체는 관계를 맺고 있는 다른 엔티티(소유자 엔티티)의 PK에 의해서만 식별이 가능한 엔티티를 말한다.이때 소유자 엔티티와 약개체는 반드시 1:N 관계를 가지며, 약개체는 그 관계에 대해 전체 참여해야 한다. 이 그림을..
이번 글에서는 두 엔티티가 맺는 관계에 걸 수 있는 다양한 제약조건에 대해 정리해본다. Key Constraints키 제약조건은 다른 엔티티와의 관계에 참여함에 있어서 최대 하나의 엔티티와만 관계를 맺을 수 있음을 나타내는 제약조건이다.즉, 지금 현재 엔티티의 키가 다른 엔티티의 키와 관계를 맺을 때 하나의 엔티티하고만 관계를 맺을 수 있다는 것이다.키 제약조건은 관계를 그을 때 화살표로 나타냄으로써 명시할 수 있다. 그림과 같은 관게를 보자.그림은 직원이 부서를 관리하는 관계를 나타내고 있다.이때 부서는 Manage 라는 관계에 대해 키 제약조건이 걸려있다. 이는 부서가 Manage 관계에 참여함에 있어서 최대 1개의 엔티티하고만 Manage 관계를 맺는다는 것을 의미한다.자연어로 표현한다면, 부서..
데이터베이스 설계데이터베이스를 설계하는 과정은 크게 3단계가 있다. 1. 요구사항 분석 (requirement analysis)정말 장인 급으로 프로그래밍을 잘하지 않는 이상, 우리는 설계를 잘 할 수 있어야 한다.설계를 잘하려면 먼저 고객이 자연어로 말하는 요구사항을 잘 분석해서 이를 토대로 데이터베이스를 설계할 수 있어야 한다. 2. 개념적 데이터베이스 설계 (conceptual database design)고객의 요구사항을 분석했다면, 그 결과를 토대로 먼저 개념적으로 데이터베이스를 설계한다.이때 UML, ERD 등을 사용하여 데이터베이스를 설계할 수 있다. 3. 논리적 데이터베이스 설계 (logical database design)데이터베이스 설계가 끝났다면, 실제로 사용할 데이터베이스를 선택하고..
트랜잭션트랜잭션(transaction)은 원자성이 있는(atomic, 쪼개지지 않는) 데이터베이스 내 일련의 동작들을 말한다.데이터베이스 내 동작들이라고 한다면, 당연히 데이터의 읽고 쓰기 과정을 말할 것이다. 예를 들어, 어떤 공동 계좌가 하나 있다고 생각을 해보자.이 계좌에는 1만원의 돈이 들어있다.그리고 '공동' 계좌이기 때문에, 계좌에서 돈을 넣고 빼는 행위는 여러 사용자에 의해서 병행으로 발생할 수 있다. 만약 내가 이 계좌에서 1000원을 출금을 할 때 필요한 과정을 생각해보면 다음과 같이 생각할 수 있다. 1. 데이터베이스에 접근인가를 받아 접근한다. (은행 계좌라면 본인 인증은 필수 일 것이다.)2. 계좌의 잔액을 조회한다. (10000원 read)3. 만약 계좌의 잔액이 1000원보다 많..
DBMSDataBase Management System : 데이터베이스 관리 시스템거대한 통합 데이터 저장소 (data collection) 프로그램이다. (DBMS는 소프트웨어다.) RDBMS (Relational DBMS) : 관계형 데이터베이스 관리 시스템 관계형 데이터베이스는 엔티티(개체)와 엔티티 사이의 관계(릴레이션)을 통해 실제 세상을 모델링한다.엔티티는 모델링하는 환경을 구성하는 요소이다. 학생이 수업을 듣는 환경을 모델링한다면, 엔티티는 '학생'과 '수업'으로 구성된다.그리고 학생과 수업은 '수강한다' 라는 관계로 이루어져있다. 나는 엔티티는 명사, 관계는 동사로 구성하기 좋다고 이해했다. "학생이 수업을 수강한다" 학생 - 수강하다 - 수업 File System vs DBMS컴퓨터가 ..