업무 과정에서 MDB -> SQLite로 마이그레이션 작업을 해야 하는 경우가 생겼습니다.

방법을 찾아 보는 과정에서 ESF Database Migration Toolkit을 알게되었고 비교적 쉽고 간단하게

변경할 수 있어 여러분에게 소개해 드리려고 합니다.

저는 MDB를 SQLite로 변환하였기 때문에 MDB와 SQlite를 기준으로 설명드리겠습니다.

 

 

 

https://www.dbsofts.com/articles/ms_access_to_sqlite/

 

Migrating data from MS Access to SQLite | DBSofts

Migrating data from MS Access(*.mdb; *.accdb) to SQLite This article will show you how to use a simple database migration wizard to quickly migrate data from MS Access to SQLite! Help you solve complex tasks and save a lot of time! Requirements: Introducti

www.dbsofts.com

위의 사이트에서 먼저 설치를 진행합니다.

 

요구사항

Windows 7 이상

MS Access 97 이상

SQLite 2 이상

 

실행파일

본인의 운영체제 조건에 맞게 32비트 64비트를 선택하여

다운로드를 완료하면 위의 실행파일 아이콘이 생깁니다.

더블클릭하여주시고, 

 

Source에 변경 전 파일 포맷을 눌러주시고, 해당 파일의 경로를 입력하여 줍니다.

이후에 Next를 눌러주시면 됩니다.

 

 

 

 

 

Destination에 변경 후 파일 파일 포맷을 눌러주시고, 저장할 경로를 

입력해주시고 Next를 눌러주세요

 

 

변환 하고자 하는 테이블을 선택하고 Next!

 

 

마지막으로 로그를 남길 수 있는 창이 뜹니다.

저는 딱히 로그가 필요하진 않을 것 같아서 공백으로 두었습니다.

그다음 Submit을 눌러주시면 끝!

 

 

 

 

 

 

최종적으로 Viewer파일을 통하여 결과를 확인하시면 성공적인 것을 확인할 수 있습니다.

 

 

 

SQLite

일반 사용자 어플리케이션 데이터베이스를 위한 사용 목적으로 개발된 오픈 RDBMS로서

별도의 서버와 프로세스 통신 없이 응용 프로그램 내에서 DB처리를 할 수 있고, 

C언어로 작성 되었으며, 일반적인 SQL(Structured Query Language)로 쿼리가 가능하다.

빠른 속도와 이식성, 안정성의 특징을 갖는다.

또한 가장 매력적인 특징 중 하나는 어디서든 실행이 가능하다는 점이고

공개된 도메인으로서 사용 목적에 관계없이 모든 사람이 자유롭게 사용 할 수 있다.

 

 

SQLite Install(설치)

2020년 4월 10일 기준 최신 버전은 3.31.1버전이며,

https://sqlite.com/index.html 에서 다운 가능하다.

 

SQLite Home Page

SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bu

sqlite.com

Sqlite-amalgamtion-3310100.zip 설치하고 압축을 해제한다.

 

 

 

압축해제 후 결과물

 

 

Static Library 생성

 

나는 VIsualStudio2005 환경에서 정적라이브러리를 생성하였다.

프로젝트명을 sqlite3으로 하고, PreCompiled Header를 체크해제하고, Static Library로 프로젝트를 생성하여

디버그 모드와 릴리즈 모드로 각각 빌드를 하여 sqlite3.lib 파일을 생성하였다.

SQLite Sample Project 생성

 

TestSQlite라는 프로젝트를 생성하여 앞에서 만든 라이브러리와 헤더파일을 각각 링크해준다.

 

아래와 같이 테스트 코드를 작성하여 보고 Test.db 파일이 실제로 생성되는지 확인

// TestSQLite.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "sqlite3.h"
int _tmain(int argc, _TCHAR* argv[])
{
	sqlite3* myDB;

	if( SQLITE_OK != sqlite3_open("Test.db", &myDB) )
	{
		cout << "Not Accessed" << endl;
	}




	sqlite3_close(myDB);
	

	return 0;
}

 

생성된 테이블 확인하기

 

// TestSQLite.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "sqlite3.h"
int _tmain(int argc, _TCHAR* argv[])
{
	sqlite3* myDB = NULL;
	sqlite3_stmt *stmt = NULL;

	if( SQLITE_OK != sqlite3_open("Test.db", &myDB) )
	{
		cout << "Not Accessed" << endl;
	}

	char *sql = "CREATE TABLE SmartID(ID INTEGER, NAME TEXT);";

	if( SQLITE_OK == sqlite3_prepare_v2(myDB, sql, -1, &stmt, 0) )
	{
		sqlite3_step(stmt);
	}
	else
	{
		cout << "can not create table" << endl;

	}



	sqlite3_finalize(stmt);
	sqlite3_close(myDB);

	return 0;
}

 

다음 코드를 통하여  정수형 타입을 갖는 ID,

문자열 NAME 의 Attribute(어트리뷰트)를 갖는 SmartID 테이블을 생성한다.

 

그리고 DB Browser를 통하여 생성된 테이블을 확인해보자.

 

 

SmartID라는 테이블이 정상적으로 생성되었고, 앞으로 이 테이블을 이용하여 사용자의

ID와 Name의 데이터를 관리 할 수있게 되었다. 

 

DB Browser 설치 : https://sqlitebrowser.org/

 

DB Browser for SQLite

DB Browser for SQLite The Official home of the DB Browser for SQLite Screenshot What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite. DB4S is for users and dev

sqlitebrowser.org

 

 

 

질의어


관계대수와 같다.
대수 = 식 
5 + 4 = 10 -> 수식
식을 구성하는 구성요소가 있다. 5, 4의 위치는 각각 항이라고 칭하고 +는 산술연산자
관계대수도 이런 식!. 

 

그러나 수가 아닌 관계(릴레이션)이 들어간 식.
마찬 가지로 관계대수에도 연산자가 있다. 
관계대수의 연산자를 이해하고 활용 하는 방법을 배운다.

관계해석 = 집합의 개념으로 나타냄, 원하는 데이터만 명시하고 질의를 어떻게
               수행할 것인가는 명시하지 않는 선언적인 언어
                대통령 선언문 -> 꿈이 있는 나라를 만들겠습니다!

관계대수 = 수식으로 뭔가를 나타냄, 선언적인언어 이기는 하지만 관계해석에 비해 약간의
               절차성이 있다.


.

실렉션, 프로젝션은 단항 연산자
합집합, 차집합, 카티션 곱은 집합연산자


1. 실렉션(σ) : 세로줄은 애트리뷰트, 가로줄은 튜플, 
r(R)에서 선택조건 c를 만족하는 튜플들을 선택
               ex)  학생 튜플이 40개 있을때, 조건을 1개줌 
                     이중에서 지난 학기 4.0이상인 학생들을 뽑아라. 
                     그럼 그에 해당하는 튜플들이 나옴 
                    원래 데이터의 갯수를 넘을 수 없다.

 


2. 프로젝션(π) : 
                 ex) 학생이라는 릴레이션에 학번, 평점만 나오게해줘!
                     특정 지정만 애트리뷰트들만 짤라 나올수 있게 하는 것이 프로젝션
                     원래 데이터의 갯수를 넘을 수 없지만 릴레이션을 집합으로 보기 때문에
                      중복된 값은 합치게 되어 ex) 과장 2개 나오면 과장1개 줄어 들 수는 있다.
실렉션과 프로젝션은
일반적으로는 교환법칙이 성립한다.
그러나 없어지는 애트리뷰트에 대한 조건문이 들어가면 안된다.
ex) 프로젝션을 통해 이름 애트리뷰트가 사라진 상태에서 
실렉션을 통해 이름을 찾는 경우 문제가 됨.



3. 합집합 : 
두개의 릴레이션의 튜플들을 합쳐주는 것 

4. 차집합 : 
2-1 학생들 중 자료구조를 수강, 송윈플 노수강인 친구들을 뽑아주세요!

5. 교집합 :
송윈플, 장자구 둘다 들은 학생을 뽑아주세요

- 합집합, 차집합, 교집합은 애트리뷰트 들의 갯수가 동일하고, 대응되는
   애트리뷰트들의 도메인이 호환성을 가져야 한다. -> 이를 합집합 호환성이라 부른다.
   = 즉 스키마가 동일한 두 릴레이션에 대해서만 집합연산이 가능하다.


두 릴레이션 들에 대해서 차집합 연산을 할때 합집합 호환성이 있어야 된다. 

 

 

엔티티 타입의 종류


- 강한 엔티티 타입  

우리가 사용하는 95%이상 
독자적으로 존재
실선 직사각형으로 표현 
독자적인 키 애트리뷰트를 가짐


- 약한 엔티티 타입 

독자적인 키 애트리뷰트가 없음
특정 강한 엔티티타입에 속함
두줄 실선 직사각형으로 표현
회사 데이터 베이스를 구축 하는 예
직원들의 자녀학비지원, 데이터베이스에서
부양가족을 관리를 해야됨
그렇게 중요한 정보는 아니지만 확실한 정보
를 관리해야됨


관계와 관계타입


관계 :  

두 개 이상의 엔티티들을 특정한 의미로  
연관 짓는 것 


관계 타입 : 


동일한 의미를 가진 관계들의 틀  
고용자들과 프로젝트들이 참여하는 works_on
관계 타입
마름모로 표현 한다.

 

관계타입에 대한 제약조건 



카디날리티 제약조건 


1:1
1:n
n:1
n:M


참여 제약조건 


의무적으로 참여해야하는지
선택적으로 참여해야하는것인지 여부


ER모델 -> 관계형데이터 모델로 변환하기 위해 배운다.

 

관계제약조건 4가지 



도메인 제약조건, 키제약조건, 참조무결성 제약조건, 엔티티무결성 제약조건


1. 도메인 제약조건 : 도메인 값을 넘어가는 값이 들어가면 안된다.
                                  

2. 키 제약조건 :  키 애트리뷰트에는 중복 된 값이 들어가면 안된다.
                       핵심 애트리뷰트(candidate)를 찾는 것이 중요 하나씩 지워나간다. 
                       

3. 참조무결성 제약조건 : 참조 받는 릴레이션에 참조하는 값을 가진 튜플이 존재 해야 한다.

4.  엔티티무결성 제약조건 : 기본 키 애트리뷰트에 null 값이 들어가면 해당 데이터를 찾을 수가 없다.
                                     

 

 



DBMS에서 일어나는 효율적으로 일어나는 연산
Search, Insert, Delete, Update

위의 4가지 관계조건은 
사용자 만족을 위한것이 아니라, 사용자가 잘못되거나, 깨지는 작업을 하더라도
DBMS가 원천적 봉쇄를 하거나 그런 일이 일어나지 않도록 하는 작업이다.
 


관계형데이터 모델의 가장 큰 장점 : 
                                    포인터 없이 값만을 갖고 포인터의 역할을 할 수 있는 매커니즘

null은 특수마크라고 알면 된다. 값이 아님.

엔티티 무결성 제약조건 : 
                              기본 키 애트리뷰트에 null 값이 들어가면 해당 데이터를 찾을 수가 없다.


하나의 릴레이션에 두개의 애트리뷰트 키가 들어가고 하나가 캔디데이트 키면 
CANDIDATE 키는 NULL이 들어갈수 있다. 


참조라고 하는 것은 하나의 릴레이션 R에 있는 속성 F의 값으로 다른 릴레이션 S의 기본 키 P값을
참조 하는 것.
-> 한쪽에선 기본키 다른쪽에선 기본키가 아닌 애트리뷰트에 있을떄
     이때 기본키가 아닌 것이 기본키를 참조한다. 얘는 외래키라고 한다.
부서번호 5 -----------------------> research 5를 참조하여 5만써도 research부서
라는 것을 알 수 있음.


1. 외래키가 만족 시켜야 할 조건이 있을까?
-> 
부서번호 6 --------------------> X 6 예를들어 6번 부서가 없다면 큰 문제가 된다.
소개팅에서 산기대 의대다녀요! -> 산기대 의대가 없다. 이런일이 발생되면 안된다!
라는 것이 참조 무결성 제약 조건이다.
참조 되는 릴레이션에 반드시 참조 되는 튜플이 있어야 한다. 

2. 외래키인 애트리뷰트는 null값이 들어 갈 수 있을까?
-> 게임공학과 의 창설 예
     학과 입장에선 학생이 없을 수도 있다.
     학과와 학생은 선택적 참여를 하는 관계다.
     이 부서엔 반드시 존재 해야만 한다면 의무적 참여 관계로 표현
     이 때에는 null값이 들어 갈 수 없다.
     참조 관계는 두개의 엔티티 타입을 외래키 관계를 통해서 표현을 한다.
     있느냐 없느냐는 이 참조 관계가 선택적참여이냐, 의무적 참여이냐에 따라서 달라 질 수 있다.

3. DBMS가 어떻게하면 무결성 제약조건을 보장할 수 있을까?
-> 

1. 검색 -> 도메인 제약조건이 위반되는 내용이 있을까? 읽기 연산으로는 도메인 제약조건이 위반되는 X
                키 제약조건에 위반되는 내용은? 갑자기 중복이 되는 경우는 X
                엔티티 제약조건은? 없다.
                참조 무결성 제약조건은? 없다. 읽기는 없다 읽기는!!
               = 검색은 없다.

2. 삽입 -> 도메인 제약조건 위반 ? -> 생길수 있다. 내가 도메인 값을 넘어가는 값을 집어 넣는 경우
                키 제약조건 위반? -> 키 애트리뷰트 중복 값을 넣으면 위반 할 수 있다. 
                엔티티 제약조건은? 내가 null을 넣음으로
                참조 무결성 제약 조건은? 있다. 
               = 4가지 모두 발생 시킬 수 있다.
                 사용자가 이런 값을 넣게 하려고 하면 해당 값을 Insert 할 수 없다고 팝업창을 띄워준다.
3. 삭제 -> 도메인 제약조건 위반? 없음.
                키 제약 조건 위반? 내가 삭제한다고 중복이 생기진 않는다. 따라서 없음
                엔티티 제약 조건 위반? 발생 하지 않는다.
                참조 무결성 제약 조건 위반? 생길 수 있다.  -> 게임공학과가 없어진다. 그럼 학생들은 
                                                                              소속 학과가 없다.

                = 참조 무결성 제약조건만 일으 킬 수 있다.
                   1. 게임공학과 폐과 -> 컴공으로 학생들을 옮긴다. 또는 원하는 과로 보낸다.
                   2. 삭제를 거부.
                   3. 삭제되는 투플을 참조하는 투플들까지 삭제 = 줄줄이 삭제되는 경우가 생긴다.
                                                                                  참조에 참조에 참조가 연쇄삭제 되는 경우
                 
4. 갱신 -> 기존에 있는 내용의 값을 바꾸는 연산  
                Insert Delete를 한다.
                삽입, 삭제를 생각하면 되므로 따로 생각 할 필요가 없다.


 




ER모델

            : Entity Relationship Attribute

            를 가지고 이 세상을 모델링 함. 

            모든 언어에는 표현력이 있다.(강한 표현력)

            인간에 가깝다(고도의추상화)           



            

엔티티

             : 이단어는 이거야!라고 머릿속에 떠오르는 것

            대부분의 경우 구체적 명사 

            독립적으로 존재하면서 고유하게 식별가능한 객체

            ex) 사람, 인간, 토끼, 의자



관계 

         : 두개 이상의 엔티티들을 연관짓는 것 

          

         ex) 결혼, 수강, 소속

            



애트리뷰트 

                 : 엔터티를 구성하는 속성 

                 ex) 이름, 학번, 위치, 강사

         = 데이터베이스의 스키마 정보에 해당





동일한 엔티티 타입에

학생이라는 엔티티타입에 30개의 엔티티

교수라는 엔티티타입에 1개의 엔티티

동일한 에트리 뷰트를 갖는 엔티티들의 모임


ex) 자동차를 예로 들어보자

자동차 = 엔티티 타입


car1  엔티티 1  

car2  엔티티 2

car3  엔티티 3


애트리뷰트 = 차 넘버, 차종 등등


Car = {엔티티1, 2, 3} = 엔티티 집합.








애트리뷰트의 종류


: 단일값 <=> 다치

  저장된 <=> 유도된

  단   순 <=> 복   합





1. 단순 애트리뷰트 :


우리가 만드는 에트리뷰트의 90%이상이 단순 

더이상 다른 애트리뷰트로 나눌 수 없는 애트리뷰트

실선 타원으로 표시

실선 사각형 = 엔티티 타입

ex) Customer[엔티티타입] -

ID, Name, address[단순 애트리뷰트]


2. 복합 애트리뷰트 :

     

두개 이상의 애트리뷰트로 이루어진 애트리뷰트 

실선 타원으로 표시하지만 

단순애트리뷰트에 선으로 연결되어있음

Address[단순애트리뷰트] - 

       City, Ku, Dong, Zipcode[복합 애트리뷰트] 


Address는 단순일까 복합일까?

: 그때그때 다르다.


그럼 언제 단순이고 언제 복합일까?

: 단순일때는 회원가입할때 단순히 주소만 입력할때

  복합일때는 주소라는 필드가 있고 입력박스로

   경기도, 서울 막 나눠서 시군구를 선택하는방식. 

   각각을 나눴기 때문에 복합.

세부적으로 검색의 조건을 나누는 경우 = 복합

그런거 필요없고 입력된거 통째로 쓴다 = 단순


3. 단일값 애트리뷰트


: 각 엔티티마다 하나의 값을 갖는 애트리뷰트

  회원가입시 학과, 생년월일   

  실선 타원으로 표시  


4. 다치 애트리뷰트


: 각 엔티티마다 여러개의 값을 갖는 애트리뷰트

  특기, 취미

  실선 이중타원으로 표시


이름은 단일값일까 다치일까?

예를들어 개명을 한 친구들이 있다.

또는 가명. 연예인 하하(하동훈) 이름 적는 란에

조금 망설일 것 이다. 본명은 사람들이 잘모름.

이 사람은 하동훈(하하) 이렇게 쓰려고 할 수도 있다.

단일로 모델링한 경우 이름 칸에 이름 하나만 써라!

-> 강제의 의미

다치로 모델링한 경우 여러개를 넣어도 괜찮아요!


국가기관 주민등록 등본상의 등록 이름의 경우 : 단일

네이버-> 연예인이름 하하(하동훈) : 다치

결과적으로 필요에 따라 모델링 방법이 다르다


데이터 모델링은 처음 모델링을 할 경우

현실상황을 그대로 반영한다고 생각하지만

모델링을 해놓고 보면 우리의 삶은 그것에 종속 된다.

ex) 버스 카드 찍는 단말기에 우리가 버스카드를 찍는다.


5. 저장된 애트리뷰트

: 말그대로 실제 값을 하드디스크에 저장해놓는 애트리뷰트

  90% 이상의 애트리뷰트가 저장된 애트리뷰트

  실선 타원으로 표기됨. 


6. 유도된 애트리뷰트

: 다른 값으로 부터 유도해 내어 얻는 애트리뷰트 

  점선 타원형

  ex) 나이라는 필드가 있다. 1년이지나면.

        모든 레코드들의 나이를 업데이트 해주어야 함.

        현재 날짜와 계산해서 얻을 수 있다.

        어디서 부터 유도가 될 수 있는지도 생각해봐야함

        

        평점, 학생수, 재학생수





키 애트리뷰트 


:  중복이 없다.

   어떠한 두개이상의 필드에 해당 앤티티에 대해서

   동일한 값을 갖지 않는다.

   ex) 학번, 지문, 홍채인식

   아닌 ex) 이름(동명이인), 

   주소를 키 애트리뷰트로 만들면 큰일남. 

   -> 너네형이 작년에 입학해서 너는 못들어와!

   중복 값이 있어선 안된다. 라는 금지의 의미를 갖는다.

   많은 엔티티 중에서 특정 엔티티를 식별해내는 의미

   2012182037 나와 -> 한명이있던가 아무도 없던가

   여러개의 애트리뷰트가 모이면 식별해 낼 수 있음

   -> 경기도 부천에사는 25살 정OO씨!

   밑줄로 표기함-> ID에 밑줄이 그어져있다면 ID=식별자

   키 애트리뷰트가 여러개 있을 수 있다.

   ID도 학번도 될 수 있음

   하지만 둘다 밑줄을 긋는다면 둘중에 하나를 정해

   밑줄을 그어야한다. 둘다 긋는 경우 둘을 합친게

   식별자가 된다는 의미이기 때문에








파일 시스템의 부족한 기능들


- 데이터 모델링 개념 : 데이터들 사이의 연관성을 표현해 줄 수 있어야 함. 

- 질의어 : 데이터들을 액세스 할 때 질의어 개념이 없음.

- 동시성제어 : 데이터가 있음. 이 데이터를 내가 혼자서 액세스할때는 문제X

  그러

- 파손, 회복

- 보안 : 이 데이터에 대한 액세스를 권한을 가진자만이 액세스 할 수 있도록

  가장 완벽한 보안은 그 데이터에 대한 존재 자체를 숨기는 것.

 


파일시스템은 이렇게 부족한 기능을 갖고있지만, 데이터베이스에선 이 모든 것을 지원해준다.




DBMS를 사용한 데이터베이스 관리



동시성 제어가능

질의어 기능 있음

여러 사용자에 적합한 다양한 인터페이스 제공

데이터 간의 복잡한 관계를 표현 -> 데이터 모델링기능

무결성 제약조건을 DBMS가 자동적으로 유지



데이터 베이스의 특징


1. 자기기술성 : 자기 자신을 표현하는 방법이 있다. 

2. 프로그램과 데이터의 분리 : 자기기술성을 통하여 

       독립적으로 존재 하도록 만든다.

3. 데이터 추상화

4. 데이터에 대한 다양한 뷰 



데이터베이스 시스템의 자기기술성 


데이터베이스에 대한 데이터(메타 데이터)를 통하여 데이터의 구조를

직접 알고 있지 않아도 데이터를 액세스 할 수 있음.


데이터와 프로그램이 독립성이 있으면 시스템의 성능은 느려진다.

계속 프로그램이 데이터를 물어봐야 하므로.


성능을 얻고싶다면, 데이터와 프로그램 사이의 의존성을 부여해준다.


데이터베이스 내의 데이터 저장구조가 변경되어도 데이터베이스 응용프로그램은 아무영향

받지 않음.


데이터의 추상화

데이터 모델을 사용함으로서 저장구조와는 별도로 데이터의 의미를

표현하는 방법을 제공함.

사람들이 인식하는 방식으로 데이터를 다룰수 있게 해줌.


데이터에 대한 다양한 뷰 


사용자는 전체 데이터베이스 보다는 관심이 있는 데이터베이스의

일부를 뷰로 정의 할 수 있음.

학생정보 DB를 보면 개략적인 내용만 나와있어.

실제 액세스는 학생들의 성격 까지 나와있음. 이게 뷰기능.

뷰라고 하는 것은 실제 데이터와 다르게 데이터를 표현. 

있는 데이터를 숨길수도, 없는 데이터를 만들수도 있음.

사용자들에게 내부구조를 숨기려고 하는 것.

기본적인 컨셉은 너네는 보여지는 데이터를 이용해 우리는 그 데이터를

활용할게



용어 정의 


ex )  

       직급 | 연봉

       대리 | 100


- 데이터베이스 스키마 : 

우리가 과목에 대한 정보를 모으고 싶어. 

그러면 학수번호, 과목이름, 교수이름, 강의시간, 학점수 등을 모아야함

이것이 스키마이다.

스키마는 변화를 자주 하지 않는다. 변화한다는 것은 필드를 수정, 삽입, 삭제

하는 것임. 

ex) 직급, 연봉

- 데이터베이스 상태 :

스키마 내의 데이터의 현재 상태 

상태의 변화는 자주 일어난다.

ex) 대리, 100


ex )  

       직급 | 연봉

       대리 | 100



데이터베이스에 변화가 일어났을때 스키마가 더 자주변화가 있을까

상태의 변화가 더 자주있을까.

-> 상태가 변환다는 이야기는 김창섭님이 대리->사장으로 바뀐다는 것.

-> 월급이 올랐어 100 -> 200 상태가 올랐음.

-> 스키마가 변화는 것은 필드가 추가 되는 것임.

-> 따라서 상태가 더 자주 변한다.



데이터 베이스 전문가들에게 있어서 

데이터베이스 구축, 설계, 모델링을 한다 -> 스키마를 정의 한다라는 의미





데이터베이스 기술의 발전은 중복을 없애는 것과의 싸움이다.

중복을 없앤다 = 데이터를 일원화 한다. 


DBMS의 사용효과


-> 표준화된 데이터 관리 : 조직 내 모든 부서에서 표준화된 문서 관리로 업무 효율증대

    

    데이터베이스 기술의 발전은 중복을 없애는 것과의 싸움이다.

    중복을 없앤다 -> 데이터를 일원화 한다.


-> 데이터 구조 변경에 융통성 부여 : 데이터베이스 내의 자료 구조가 변경되어도 

   사용자에 대한 영향은 거의 없음


-> 응용프로그램의 개발시간 단축 : 응용 프로그램이 상당한 부분을 DBMS가 처리


-> 항상 최신의 정보를 제공 : 


-> 규모의 경제성 : 부서마다 다른 방식으로 자료를 관리하는 것보다    

   통합 DB로 관리하는 것이 전체적으로 저 비용임





DBMS의 단점은 무엇일까?


1. 비용증가 - 비싸다

2. 성능감소 - 거의 모든 분야에 쓸수 있기 때문에 장착한 기능이 많음. 무거움

3. 고장의 영향 확대 - 중복된 데이터를 중복 없애면 통합됨.

   그러다 보면 데이터가 한가운데 모이게 됨.

   이렇게 되면 한곳이 고장나면 다 고장나게 됨.



데이터베이스 사용자



- DBMS 개발자 ( 핵심 코어 오라클, mySQL 을 만든 사람들 )

- DB관리자

- DBMS 설계자 ( 데이터 베이스 스키마를 만드는 사람 )

- 시스템 분석가 

- 도구 개발자

- 운영자

- 최종 사용자 ( 가장 바깥쪽에 있는 사람들, 응용프로그램 개발자, 사용자 ) 






데이터베이스를 공부하기 전에 관련 용어와 개념에 대해서 알아보자!!



데이터 


의미를 가지면서 기록 될 수 있는 알려진 사실

의미 =  객관적인 사실이 아닌 주관적인. 

(즉, 어떤사람에겐 의미가 있고,반대로 어떤 사람에겐 의미가 없을 수 있음) 누군가 에겐 데이터 일지라도, 다른 누군가에게는 데이터가 아닐 수 있다.

  


데이터베이스 


관련있는 데이터의 모임



데이터베이스 관리시스템 


데이터베이스의 생성과 관리를 담당하는 소프트웨어 패키지



데이터베이스 시스템 


Database와 그를 관리하는 소프트웨어(DBMS, 응용프로그램)

모두를 칭하는 용어



작은 세계  


데이터베이스 구축의 대상이 되는 실세계의 일부분




데이터베이스 프로그램은

적절한 시간내에 활용 할 수 있게 하는 것도 중요



파일이란?


물리적인 비트의 연속, 순차적인 레코드들로 구성

레코드는 연관된 필드들의 모임

레코드는 서로 연관된 필드들로 구성되어있다.



파일시스템의 가장 큰 문제는 


1. 데이터에 대한 프로그램의 의존도가 높다. -> 데이터 구조가 바뀌면

프로그램도 바뀌어야 한다.

2. 데이터의 중복성 -> 각각 2파일에 동일한 정보임에도 불구하고

중복되어 저장이 되면 데이터의 수정이 일어날때 

한쪽에만 수정이되고 다른 쪽에 수정이

되지 않는 경우가 발생 할 수 있음. 이 경우 데이터의 불일치 발생



제약조건


데이터의 무결성을 보장하기 위한 조건.




데이터 무결성


DB에 저장된 데이터의 일관성을 의미하며 데이터의 입력, 수정을 제한하여 안전성을 저해하는 요소를 예방하는 것을 의미

즉, 해당 데이터에 대해 무작위로 입력, 수정을 할 수 없도록 막는 것.




제약 조건


1. NOT NULL 

2. UNIQUE

3. PRIMARY KEY

4. FOREIGN KEY

5. CHECK




1. NOT NULL


NULL 값을 넣을 수 없음. Default를 정의하여 해당 데이터가 없을 경우에 Defalut값을 넣도록 할 수 있다.


사용예시 ) char_id varchar2(8) NOT NULL;




2. UNIQUE


중복된 값이 아닌 유일한 값만 넣을 수 있음. 해당 테이블 내에서 동일한 값이 들어가게 되면 에러가 난다.


사용예시 ) user_num number UNIQUE;




3. PRIMARY KEY


Null 값을 갖지 못하며, 중복된 값을 가질 수 없음. 즉 NOT NULL, UNIQUE를 동시에 정의 한 것 과 같다.


사용예시 ) user_num PRIMARY KEY;




4. FOREIGN KEY


외래키, 해당 컬럼은 반드시 다른 테이블의 기본키와 참조 관계를 갖고 외래키로 지정된 컬럼은 참조관계를 가진 테이블의 기본키에 있는 값만을 가질 수 있다. 이 경우에 자식 테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능하다. 옵션을 통해서 부모테이블에 삭제되면 자식테이블도 삭제 가능


사용예시 ) constraints 외래키명 FOREIGN KEY references 참조테이블명(기본키 컬럼명)





5. CHECK 


입력 될 수 있는 데이터의 종류를 제한. 기본 연산자, 비교연산자, IN, NOT IN 등 사용이 가능하다.


사용예시 ) gender varchar2(8) CHECK ( gender IN ('Man', 'Woman' ) 







+ Recent posts