일반인이라면 처음에 듣고 그냥 저장소 아냐? 이렇게 생각이 들 것이다. 나 또한 그냥 저장소를 의미하는 줄 알았다. 하지만 서버, 시놀로지 등 저장용도들로 사용하는 것은 따로 있다. 그러면 데이터베이스란 뭘까? '데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다'라고 위키백과에 적혀있다. 따라서 저장한 데이터들을 업무처리를 위해 상호작용이 되어주는 기능이라고 이해했다. 또 어떤분은 전자적으로 저장되고 사용되며 관련있는 데이터들의 조직화된 집합이라고 한다.
수시적이고 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 한다.
데이터베이스의 상태는 동적이다. 즉 새로운 데이터의 삽입(Insert),삭제(Delete),갱신(Update)로 항상 최신의 데이터를 유지한다.
데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라, 사용자가 요구하는 데이터 내용으로 데이터를 찾는다.
위 이미지는 chinook이라는 데이터베이스를 보여주는데 그 중 table 데이터들을 모아둔 것이다.
그리고 다음 이미지는 ERD(Entity Relationship Diagram)또는 schema(스키마)라고 부르며 서로 관계를 나태낸 것이다. 따라서 이를 통하여 데이터들의 관계를 알 수 있으며 상호작용이 가능하다. ERD와 스키마는 차이가 있지만 요샌 같은개념으로 부르는거 같다.
위 이미지를 보면 invoices라는 테이블에 Invoiceid라는 기본키가 표시 되어있다. 그럼 여기서 기본키란 무엇일까?? 데이터베이스는 다른 테이블(데이터)들을 상호작용하여 사용할 수 있어야 된다. 따라서 테이블마다 고유값을 정해야 되는데 그것이 바로 기본키다. 쉽게 말해서 중복값이 없어야 된다.
예시1> Customer라는 테이블생성 / customer_id를 기본키로 지정
<in>
CREATE TABLE Customer
([customer_id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[customer_name] VARCHAR(32) NOT NULL,
[customer_age] INTEGER
);
AUTOINCREMENT
기본키가 고유값을 가지기 위해 자동증가하도록 설정
예시2> Package라는 테이블생성 / package_id를 기본키로 지정
<in>
CREATE TABLE Package
([package_id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[package_name] VARCHAR(32) NOT NULL,
[package_date] DATE
);
예시3> Customer_Package라는 테이블생성 / cp_id를 기본키로 지정 / customer_id, package_id를 외래키로 받음
<in>
CREATE TABLE Customer_Package
([cp_id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[customer_id] INTEGER,
[package_id] INTEGER,
FOREIGN KEY ([customer_id]) REFERENCES "Customer" ([customer_id])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([package_id]) REFERENCES "Package" ([package_id])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
ON DELETE NO ACTION
다른 테이블에 있는 기존 행의 외래 키에서 참조하는 키가 있는 행을 삭제하려고 할 때 오류를 발생시키고 DELETE가 롤백되도록 지정
ON UPDATE NO ACTION
다른 테이블에 있는 기존 행의 외래 키에서 참조하는 키가 있는 행에서 키 값을 업데이트하려고 할 때 오류를 발생시키고 UPDATE가 롤백되도록 지정