프로그래밍/Database

데이터베이스 기초

Jay Tech 2017. 1. 11. 19:54
반응형

거의 모든 웹 어플리케이션이 회원정보, 게시글 내용, 기타 데이터등을 저장하기 위해서 데이터베이스를 사용하고 있다. 반드시 익혀야 하는 기술중 하나이며 특히 웹쪽은 거의 모든 페이지가 데이터베이스와 통신을 하므로 필수 불가결이다.

java에서는 jdbc api를 이용해서 데이터베이스 프로그래밍을 하게 된다.



데이터베이스의 발전


- 1960년대 : 플로우차트 중심의 개발 방법을 사용하였으며 파일 구조를 통해 데이터를 저장하고 관리하였다.
- 1970년대 : 데이터베이스 관리 기법이 처음 태동되던 시기였으며 계층형(Hierarchical) 데이터베이스, 망형(Network) 데이터베이스 같은 제품들이 상용화 되었다.
- 1980년대 : 현재 대부분의 기업에서 사용되고 있는 관계형 데이터베이스가 상용화되었으며 Oracle, Sybase, DB2와 같은 제품이 사용되었다.
- 1990년대 : Oracle, Sybase, Informix, DB2, Teradata, SQL Server 외 많은 제품들이 보다 향상된 기능으로 정보시스템의 확실한 핵심 솔루션으로 자리잡게 되었으며, 인터넷 환경의 급속한 발전과 객체 지향 정보를 지원하기 위해 객체 관계형 데이터베이스로 발전하였다.



1. 데이터베이스 기초


DBMS(Database Management System) 


ex) Oracle, Mysql, MsSql


DBMS의 몇가지 주요기능


- 데이터의 추가/조회/변경/삭제

- 데이터의 무결성(integrity)유지

- 트랜잭션 관리

- 데이터의 백업 및 복원

- 데이터 보안




RDBMS (Relational DBMS) 관계형 데이터베이스


RDBMS가 저장되는 장소를 테이블이라고 한다. 테이블 구조와 관련된 정보를 스키마(Schema)라고 부른다.


칼럼이름 

칼럼타입 

길이 

MEMBERID 

 VARCHAR

10 

PASSWORD 

VARCHAR 

10 

NAME 

VARCHAR 

20 



MEMBERID PASSWORD와 같이 칼럼 데이터모음을 레코드(record)라고 부른다.


이들 레코드와 칼럼 그리고 테이블을 사용해서 데이터를 저장하고 추출하는 작업을 수행하는 것이 바로 데이터베이스 프로그래밍이다.





2. 주요키(Primary Key)와 인덱스(index)


주요키는 하나의 테이블에 저장된 모든 레코드가 서로 다른 값을 갖는 칼럼을 의미한다.

인덱스는 데이터의 순서를 미리 정렬해서 저장할 때 사용된다. 

사실 주요키도 일종의 인덱스이지만 인덱스는 중복된 값이 가능하지만 주요키는 그렇지 않다.





3. 데이터베이스 프로그래밍의 필수요소


- DBMS : 데이터베이스를 관리해주는 시스템 (Oracle...)


- 데이터베이스 : 데이터를 저장할 공간


- DBMS 클라이언트 : 데이터베이스를 사용하는 어플리케이션 (SQL Plus 오라클에서 , JDBC Driver 자바에서)






4. SQL 기초


SQL(Structed Query Language)


SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어이다. SQL의 최초 이름이 SEQUEL(Structured English QUEry Language)이었기 때문에 ‘시큐얼’로 읽는 경우도 있지만, 표준은 SQL이므로 ‘에스큐엘’로 읽는 것을 권고한다. 
SQL의 문법이 영어 문법과 흡사하기 때문에 SQL 자체는 다른 개발 언어에 비해 기초 단계 학습은 쉬운 편이지만, SQL이 시스템에 미치는 영향이 크므로 고급 SQL이나 SQL 튜닝의 중요성은 계속 커지고 있다. 


cf>  테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것을 정규화(Normalization)라고 한다. 데이터의 정합성 확보와 데이터 입력/수정/삭제시 발생할 수 있는 이상현상(Anomaly)을 방지하기 위해 정규화는 관계형 데이터베이스 모델링에서 매우 중요한 프로세스이다.


표준 SQL의 주요 타입 (주요일부만)


 CHAR

확정길이의 문자열 255글자까지 

VARCHAR 

가변길이의 문자열 255글자까지 

INTEGER 

정수 

TIME 

시간 

DATE 

날짜 


cf> Oracle에서는 4000자까지 가능한 VARCHAR2가 존재하기도 한다.



** 테이블 생성



PK 주요키 설정은 뒤에 PRIMARY KEY 라고 써준다.

NOT NULL은 필수값을 의미한다.



- 데이터 삽입 쿼리


insert into [테이블이름] ([칼럼1, 칼럼2,...) values([값1], [값2]...)


SQL에서는 작은 따옴표로 문자열을 표현한다. 그러나 표현하고자하는 문자열 안에 작은 따옴표가 있을 때 앞에 작은 따옴표를 하나 더 붙여서 준다.



- 데이터 조회 쿼리


seelct [칼럼]... from [테이블이름] where [조건]


부등호 사용 where SALARY >= 1000 and SALARY <= 2000 이런식으로 쓴다.



LIKE조건


where NAME like '김%'  => NAME 칼럼이 '가'로 시작하는 레코드를 찾을 때


실무팁)

LIKE는 편리하지만 검색속도가 매우 느리다. 수천개 이내라면 괜찮지만 수만 개이상~ 의 데이터를 조회할 때는 검색속도가 매우 느려지므로 별도의 검색엔진이 필요하다.



- 데이터 정렬


select .. from [table] where [condition] order by [column] asc, => 오름차순   desc => 내림차순



- 데이터 집합


sum() max() min() count() 등


select max(SALARY) => SALARY 칼럼중 가장 큰 값


select count(*) from TALBE => 전체 레코드의 개수



- 데이터 수정


update [table] set [칼럼1]=[값1] where [조건]


update할 때 조건을 잘 맞춰줘야한다. 전부다 바뀔수도 있다.



- 데이터 삭제


delete from [table] where[조건]



- 데이터 조인


JOIN 은 두 개 이상의 테이블로 부터 관련 있는 데이터를 읽어올 때 사용한다. 


select * from [테이블1] as A, [테이블] as B where A.MEMBERID = B.MEMBERID


이렇게 2개 이상의 테이블로부터 같은 값을 갖는 칼럼을 사용하여 함께 레코드를 묶어서 읽어오는 것을 조인이라고 한다.



== 조인 == 


JOIN은 관계형 데이터베이스의 꽃이다. 정규화이론을 활용하여 데이터 이상현상을 제거하고 데이터 중복을 최소화하고 데이터를 관리하는 관계형 데이터베이스에서 유용하게 사용되는 기능이다.


각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.


- 내부조인 (INNER JOIN)


가장 일반적인 조인 형태이다. 둘 이상의 테이블에 존재하는 공통 컬럼의 값이 같은 것을 결과로 추출한다.


- 동등 조인 (EQUI JOIN)


둘 이상의 테이블에 존재하는 공통 컬럼(속성)의 동등 비교만을 사용하며, 부등호 조인은 동등조인에 포함되지 않는다.


- 자연 조인(NATURAL JOIN)


조인 대상 테이블의 모든 컬럼을 비교하여, 같은 컬럼명을 가진 컬럼으로 조인을 수행합니다. 이때, 같은 이름을 가진 컬럼은 한 번만 추출된다. 


- 셀프 조인(SELF JOIN)


자가 조인이라고 하며 같은 두 테이블을 활용하여 데이터를 추출하는 조인 기법이다.





- 외부 조인(OUTER JOIN)


- 왼쪽 외부 조인(LEFT OUTER JOIN)


우측테이블에 조인할 컬럼의 값이 없는 경우 사용한다. 즉 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성한다.


- 오른쪽 외부 조인(RIGHT OUTER JOIN(


그 반대이다.


- 완전 외부 조인(FULL OUTER JOIN)


완전 외부 조인은 양쪽 테이블 모두 OUTER JOIN이 필요할 때 사용한다.


- 안티 조인(ANTI JOIN)


부정형 조인이라고 하며 테이블에서 조인의 대상이 되는 테이블과 일치하지 않는 데이터를 추출하는 연산을 하는 조인기법



--------각 조인의 상세한 내용은 추후 포스팅에서 할것임



반응형