본문 바로가기
DB

[DB] 파일 시스템과 DBMS

by inyeong 2024. 9. 5.

데이터를 저장하는 방법


도서 검색 프로그램을 구현할 때 데이터를 저장하는 방법은 3가지다. 
 

  1. 데이터를 프로그램 내부에 저장

    •    여러 종류의 자료형을 가진 데이터를 저장해야 하므로 구조체 배열을 사용한다.
      도서 데이터는 프로그램 내 구조체 변수에 저장된다. 

    • 구조
      프로그램에 데이터 구조와 데이터 값이 모두 포함된다.

      // 구조체 BOOK 선언
      typedef struct {
      	int bookid;
          char bookname[20];
          char publisher[20];
          int price;
      } BOOK;
      
      // 구조체 배열 변수 BOOKS[]에 데이터 저장
      int main(){
      	BOOK BOOKS[10];
      	
          BOOKS[1].bookid = 1;
          strcpy(BOOKS[1].bookname, "첫 번째 책");
          strcpy(BOOKS[1].publisher, "출판사");
          BOOKS[1].price = 7000;
          
          BOOKS[2].bookid = 2;
          strcpy(BOOKS[1].bookname, "두 번째 책");
          strcpy(BOOKS[1].publisher, "출판사");
          BOOKS[1].price = 7000;
          
          // 생략
          
          return 0;
      }


    •    문제점
      데이터 구조나 값을 수정하려면
      프로그램 자체를 수정하고 다시 컴파일한 뒤 프로그램을 실행해야 한다. 
      즉, 컴파일 하는 동안 서비스가 중단되는 문제가 발생한다.

  2. 파일 시스템 사용

    •    데이터를 별도의 파일에 저장할 수도 있다.
      마찬가지로 구조체를 선언하고, 파일에서 데이터를 불러와 구조체 배열에 저장한다.

    •   구조

      // 구조체 BOOK 선언
      typedef struct {
      	int bookid;
          char bookname[20];
          char publisher[20];
          int price;
      } BOOK;
      
      // 파일에 저장된 데이터를 배열 BOOKS[]에 저장
      int main(){
      	BOOK BOOKS[10];
      	int i = 1;
          
          // "book.dat" 파일을 바이너리 모드(rb)로 읽기 위해 열기
          fp = fopen("book.dat","rb"); 
          // BOOK 구조체 크기만큼 메모리를 할당하고, 그 메모리 포인터를 bp로 받음
          bp = (BOOK *)calloc(1,sizeof(BOOK));
         
          // 파일에서 BOOK 구조체 크기만큼 데이터를 읽어 bp에 저장, 읽은 데이터가 없으면 종료
          while(fread(bp, sizeof(BOOK), 1, fp) ! = 0) {
          	// bp에 저장된 데이터를 BOOKS 배열의 i번째 요소에 복사
          	BOOKS[i].bookid = bp->bookid;
          	strcpy(BOOKS[1].bookname, "첫 번째 책");
          	strcpy(BOOKS[1].publisher, "출판사");
          	BOOKS[1].price = 7000;
          	i++:
          }
          
          //생략
      }


    •    문제점
      데이터가 수정될 때 다시 컴파일할 필요는 없지만 구조를 바꿔야 할 수 있고,
      같은 파일을 여러 프로그램이 공유할 때 문제가 발생할 수 있다.

  3. DBMS 사용

    •    데이터를 DBMS에 저장하는 방법을 이용할 수도 있다. 
      DBMS가 데이터 구조를 정의하고, 데이터를 관리하기 떄문에 
      데이터를 프로그램 내부에 저장하거나 별도의 파일에 저장하지 않는다.

    •    이를 위해 SQL 언어를 추가로 사용한다.
      이때, SQL을 embeded language, C를 host language라 한다.

    • 구조

    •    장점
      1. 프로그램 개발 생산성 향상
      2. 데이터 중복 최소화 & 일관성 유지
      3. 데이터 독립성 유지
      4. 관리 기능 제공

 
 

'DB' 카테고리의 다른 글

[DB] 데이터베이스 개념  (0) 2024.05.31
[DB] SQL 기본 문법과 활용  (0) 2024.05.31