본문 바로가기
Kosta DevOps 과정 280기/Java

데이터베이스 관리 시스템 (DataBase Management System)

by 롯슈83 2024. 6. 10.
  • 프로그램 실행 결과를 출력
    • 컴퓨터 화면 : 휘발성
    • 파일 : 영구저장, 동시에 최신의 정보 공유 X
    •  데이터 베이스 : 영구 저장, 동시에 최신의 정보 공유 O
  • 데이터베이스 관리 시스템 ( DBMS ,DataBase Management System)
    • 데이터 베이스 관리 시스템을 통하여 데이터베이스를 사용한다.
  • 종류 : Oracle, Mysql, MsSql, mariaDB,...
  • 데이터 베이스 종류
    • 관계형 데이터 베이스
      • 대체적으로 관계형 데이터 베이스를 많이 사용한다.
      • 우리가 학습하는 오라클은 "관계형 데이터 베이스"에 해당한다.
      • 관계형 데이터베이스는 기업의 정보구조를 여러 개의 테이블로 나타낸다.
      • 각 테이블은 행과 열로 구성되어 각각의 테이블은 서로 관계가 있도록 만들어진다
      • 관계가 있다라는 말은 두개의 테이블에 공통으로 들어가는 Column(속성) 이 있는 것이다.
      • 예를 들어 부서관ㄹ히 시스템에서 부서의 정보를 저장하기 위한 부서 테이블의 속성으로는 부서번호, 부서명, 부서위치가 있다고 한다.
      • 부서
        부서번호    부서명       부서위치
        10               기획팀          판교
        20               개발팀        광화문
        30               총무팀        광화문
      • 이 부서에 소속된 사원의 테이블 속성으로는 사원번호, 사원명, 급여 그리고 어느 부서에 속해있는지 부서 번호가 있어야 한다.
      • 사원
        사원번호      사원명          급여          부서번호
        1000            변시우           500                20
        1001             임유나          500                10
      • 이와 같이 2개의 테이블에 부서 번호라는 속성이 공통으로 들어가 있다. 이것을 우리는 관계에 있다라고 말한다.
      • 이론적으로 관계의 종류도 많이 있지만 우리가 학습할 관계는 "주종관계(부모자식관계)" 이다.
      • 2개의 테이블에 데이터가 먼저 들어가야 하는 것을 부모로 본다.
    • 객체 데이터 베이스
  • 데이터베이스 명령어의 종류
    • 데이터 정의어(DDL, Data Definition Language)
      • 테이블이나 개체를 생성, 수정, 삭제하는 명령
      • (테이블 구조를 변경하는 수정 및 테이블 자체 삭제 등)
    • 데이터 제어어(DCL, Data Control Language)
      • 사용자를 생성, 삭제, 권한을 부여, 권한 취소
    • 데이터 조작어(DML, Data Manipulation Language)
      • 레코드를 추가, 수정, 삭제, 조회하는 명령
      • 여태까지 했던 executeUpdate, executeQuery 등의 명령어가 여기에 속한다.
  • 식별자(primary key)를 테이블에 정해놓아야한다. 식별자를 설정해야 관계를 설정할 수 있다
    • 주 식별자 : 다른 record 와 구분이 되도록하는 항목
    • 없어도 테이블 자체는 만들어진다. 
    • 부모의 pk가 자식에 관계가 있도록 설정해야 한다. \
  • 참조키 : 반드시 자식은 부모에 있는 주 식별자를 참조해야한다.
  • 서점 관리 시스템을 위한 3개의 테이블 만들기 예시
    • 도서(도서번호, 도서명, 가격, 출판사)
      • book(bookid*, bookname, price, publisher)
    • 고객(고객번호, 고객명, 주소, 전화)
      • customer(custid*, name, address, phone)
    • 주문(주문번호, 고객번호, 도서번호, 주문가격, 주문일)
      • order(orderid*, custid+, bookid+, saleprice, orderdate)
    • 여기서 * 항목은 식별자(pk)를 표시한 것이다.
    • 여기서 +항목은 참조키를 표시한 것이다.
    • book 테이블은 book을 주식별자(primary key)로 설정하여 다른 레코드와 구별하도록 한다.
    • customer 테이블은 custid 를 주식별자(primary key)로 설정하여 다른 레코드와 구별하도록 한다.
    • orders 테이블은 orderid를 주식별자(primary key)로 설정하여 다른 레코드와 구별하도록 한다.
    • orders 테이블에 custid 는 반드시 customer 테이블에 존재하는 custid 가 되도록 설정한다.(참조키 설정 - foreign key)
    • 또, orders 테이블의 bookid는 반드시 book 테이블에 존재하는 bookid 가 되도록 설정한다.(참조키 설정 - foreign key)
    •  primary key : 테이블을 만들 때 다른 레코드와 구별할 수 있는 속성이 필요한데, 이것을 "주식별자"라고 하며 주 식별자를 설정하기 위하여 primary key 로 한다.
    • foreign key : 두 개의 테이블을 관계로 설정할 떄 자식 테이블의 어떤 속성을 부모의 주식별자를 참조하도록 하기 위하여 사용한다.
    • 제약 사항을 건다.

예시 코드

  • 테이블 생성
create table customer(
	custid number primary key,
    name varchar2(20),
    address varchar2(20),
    phone varchar2(20)
);
create table book(
	bookid number primary key,
    bookname varchar2(50),
    price number,
    publisher varchar2(50)
);
create table orders(
	orderid number primary key,
    custid number references customer(custid),
    bookid number references book(bookid),
    saleprice number,
    orderdate date
);
  • book에 record 추가
    • 위에서 pk가 아닌 것을 괄호안에 넣으면 에러가 뜬다.
insert into book(bookid, bookname, publisher, price) values(3, '축구의 이해', '대한미디어', 13000);
insert into book(bookid, bookname, publisher, price) values(4, '골프 바이블', '대한미디어', 35000);
insert into book(bookid, bookname, publisher, price) values(5, '피겨 교본', '굿스포츠', 8000);
insert into book(bookid, bookname, publisher, price) values(6, '역도 단계별 기술', '굿스포츠', 6000);
insert into book(bookid, bookname, publisher, price) values(7, '야구의 추억', '이상미디어', 20000);
insert into book(bookid, bookname, publisher, price) values(8, '야구를 부탁해', '이상미디어', 13000);
insert into book(bookid, bookname, publisher, price) values(9, '올림픽 이야기', '삼성당', 7500);
insert into book(bookid, bookname, publisher, price) values(10, 'Olympic Champion', 'Pearson', 13000);

  • 표 보이는 포맷 설정
    • select * from book 하면 column 이 넓어져서 위와같이 나오므로 format을 지정해준다.
column bookid format 9999;
//4자리를 본다는 뜻
column bookname format a20;
//20자
column price format 999,999;
//가격 쉼표 표시
column publisher format a20;
//20자

  • 이 구문은 끄면 다시 쳐야 하므로 명령어를 파일에 저장 후 실행한다.
SQL > ed ff
//해당 파일에 아래 입력 후 저장
column bookid format 9999;
column bookname format a20;
column price format 999,999;
column publisher format a20;
 //위 파일 실행
SQL > @ff
  • customer record 추가
insert into customer values(1, '박지성', '영국 맨체스터', '000-4040-1000');
insert into customer values(2, '김연아', '대한민국 서울', '201-4040-1000');
insert into customer values(3, '장미란', '대한민국 강원도', '101-4040-1000');
insert into customer values(4, '추신수', '미국 클리블랜드', '000-4040-1000');
insert into customer values(5, '박세리', '대한민국 대전', '000-4040-1000');
  • 컬럼 자료형 변경
    • 한글은 한 글자 표현하기 위해서 varchar2(3) 필요하다. 
    • 입력하려는 대한민국 강원도는 varchar2(20)으로는 부족하다는 오류가 뜬다
    • 30칸으로 column의 자료형을 수정하는 법
    • 여기서 충돌난 행만 다시 써줘야 한다.(충돌 안들어간건 잘 들어감)
alter table customer modify address varchar2(30)
  • orders 테이블 record 추가
    • 박지성이 축구의 역사를 6000원에 오늘 날짜에 주문
      • 주문 번호는 1
      • 박지성이라는 이름 대신 bookid를 넣어야 한다.
      • 축구의 역사라는 이름 대신 bookid 를 넣어야 한다.
      • 관계에 있는 주 식별자 값이 record에 들어간다.
insert into orders values(1, 1, 1, 6000, '2024/05/10');
insert into orders values(2, 1, 3, 21000, '2024/05/03');

insert into orders values(3, 2, 5, 8000, '2024/06/03');
insert into orders values(4, 3, 6, 6000, '2024/06/04');

insert into orders values(5, 4, 7, 20000, '2024/06/05');
insert into orders values(6, 1, 2, 12000, '2024/06/07');

insert into orders values(7, 4, 8, 13000, '2024/06/07');
insert into orders values(8, 3, 10, 12000, '2024/06/08');

insert into orders values(9, 2, 10, 7000, '2024/06/08');
insert into orders values(10, 3, 8, 13000, '2024/06/10');

 

  • 데이터베이스 명령어는 중 DML 을 SQL(Structured Query Language-구조적 질의 언어)를 부른다. 특히 조회하는 명령어에 한정해서 말하기도 한다. 시퀄이라고 줄여 말하기도 한다.
  • DML(데이터 조작어)
    • insert : 레코드 추가
    • update : 레코드 수정
    • delete : 레코드 삭제
    • select : 레코드 조회(가장 많이 보게 될 명령어)
  • 관계형 데이터 베이스 자체를 SQL 이라고도 한다.
  • 관계형 데이터 베이스 자체만으로는 빅데이터를 표현하기 어렵다는 얘기가 있다(정형화된 포맷) 그래서  SQL 만으로 안된다는 개념으로 no-sql 이 생겼다.(시간 되면 no-sql도 수업)
  • 단, sql 은 기본으로 해야 한다.(익숙하고 잘 알때만

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

DB- 데이터 조회하기 -2  (0) 2024.06.11
DB- 데이터 조회하기  (0) 2024.06.10
데이터베이스 프로그램-3  (0) 2024.06.07
데이터 베이스 프로그램-2  (0) 2024.06.05
데이터 베이스 프로그램  (0) 2024.06.04