데이터와 정보
데이터 : 현실 세계에서 단순히 관찰하거나 측정하여 수집한 사실이나 값으로, 자료라고도 함
정보 : 데이터를 의사 결정에 유용하게 활용할 수 있도록 처리하여 체계적으로 조직한 결과물
정보 처리 : 데이터에서 정보를 추출하는 과정 또는 방법
데이터베이스 : 유용하게 활용할 수 있는 정보를 정확히 추출할 수 있도록 데이터를 관리
정보 시스템과 데이터베이스
정보 시스템 : 데이터를 수집 및 저장했다가 필요할 때 유용한 정보를 만들어주는 역할
데이터베이스의 정의
공유 데이터 : 여러 사용자가 함께 소유하고 이용할 수 있어야하기에 여러 목적의 사용자를 고려
통합 데이터 : 효율성 때문에 중복을 허용하는 경우가 있지만, DB는 데이터 중복을 허용하지 않음
저장 데이터 : 컴퓨터가 접근할 수 있는 매체에 DB를 저장
운영 데이터 : 조직 활동을 수행하기에 데이터를 지속적으로 유지
데이터베이스의 특징
실시간 접근 : 사용자의 요구에 실시간으로 응답
계속 변화 : DB의 동적인 특징 때문에 현재의 정확한 데이터를 유지
동시 공유 : 여러 사용자가 동시에 동일한 데이터에 접근 및 사용할 수 있고 데이터 일관성과 무결성을 유지
내용으로 참조 : 데이터의 내용 조건만 제시하면 조건에 맞는 데이터를 검색 가능
데이터 종류
스키마 : 미리 정해진 데이터 구조
정형 데이터 : 미리 정해진 구조에 따라 저장된 데이터
반정형 데이터 : 구조에 따라 저장된 데이터이지만 데이터 내용 안에 구조에 대한 설명이 존재
메타 데이터
비정형 데이터 : 정해진 구조 없이 저장된 데이터로, 소셜 데이터의 텍스트, 영상, 이미지, 워드나 문서와 같은 멀티미디어 데이터가 대표적임
과거 데이터 관리 시스템의 단점
DB 관리 시스템
DB 관리 시스템의 정의 : 조직에 필요한 데이터를 DB에 통합하여 저장하고 이에 대한 관리를 담당
정의 기능 : 데이터베이스 구조를 정의하거나 수정할 수 있음
조작 기능 : 데이터를 삽입, 삭제, 수정, 검색하는 연산을 할 수 있음
제어 기능 : 데이터를 항상 정확하고 안전하게 유지할 수 있음
데이터베이스 관리 시스템의 장단점
장점
1. 데이터 중복 통제
2. 데이터 독립성
3. 데이터 동시 공유
4. 데이터 보안력
5. 데이터 무결성
6. 표준화
7. 장애 회복 가능
8. 응용 프로그램 개발 비용 감소
단점
1. DB 관리 시스템 개발 비용 증가
2. 백업과 회복 방법이 복잡
3. 중앙 집중 관리의 취약점
DB : 저장된 데이터의 집합
DB 관리 시스템 : DB에 저장된 데이터를 일관되고 무결한 상태로 유지
DB 시스템 : DB 관리 시스템을 통해 조직에 필요한 정보를 제공해주는 전체 시스템
스키마와 인스턴스의 차이
스키마 : 데이터 구조와 제약 조건을 정의한 것
인스턴스 : 정의된 스키마에 따라 DB에 실제로 저장된 값
스키마는 한 번 정의되면 자주 변경되지 않지만, 인스턴스는 계속 변함
3단계 데이터베이스 구조
외부단계_외부 스키마
사용자 관점 : DB의 특정 부분만을 볼 수 있는 개별 사용자나 애플리케이션의 관점
뷰 : 각 사용자나 애플리케이션에 맞게 데이터의 특정 부분을 보여주는 맞춤형 뷰를 제공
보안 및 접근 제어 : 데이터 접근 권한을 관리하여 보안성을 향상
개념단계_개념 스키마
전체 조직 관점 : DB의 전체 구조를 나타내며, 모든 데이터와 그 관계를 포괄
E-R 모델 : 개체, 속성, 관계를 통해 DB의 논리적 구조를 정의
독립성 : 외부 단계와 물리적 단계로부터 독립적이어서, DB의 논리적 구조 변경이 다른 곳에 영향을 미치지 않음
내부단계_내부 스키마
물리적 저장 관점 : 데이터가 실제로 저장되는 방식과 위치를 정의
파일 구조 및 인덱스 : 데이터 저장을 위한 파일 구조와 데이터 접근을 위한 인덱스를 포함
성능 최적화 : 저장소 구조와 접근 메커니즘을 최적화하여 성능을 향상
데이터 독립성
외부/개념 사상 : DB의 외부 단계와 개념적 단계를 연결
개념/내부 사상 : DB의 개념적 단계와 내부 단계를 연걸
논리적 데이터 독립성 : 개념 스키마가 변경되더라도 외부 스키마가 영향을 받지 않음
물리적 데이터 독립성 : 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않음
데이터베이스 관리자
DB 관리자의 주요 업무
1. DB의 구성 요소 선정
2. DB의 스키마 정의
3. 물리적인 저장구조와 접근 방법 결정
4. 무결성 유지를 위한 제약조건 정의
5. 보안 및 접근 권한에 대한 정책 결정
6. 백업 및 회복 기법 정의
7. 시스템 DB 관리
8. 시스템 성능 감시 및 성능 분석
9. 변화된 상황에 맞게 DB 재구성
데이터 모델링과 데이터 모델의 개념
데이터 모델링_현실에 존재하는 데이터를 DB로 옮기는 변환 과정
0. 데이터 모델은 데이터 구조, 연산, 제약조건으로 구성
1. 개념적 모델링 : 현실에서 중요한 데이터를 추출하여 개념 세계로 옮기는 작업
2. 논리적 모델링 : 개념 세계의 데이터를 DB에 저장할 구조를 결정하고 이 구조로 표현하는 작업
(일반적으로 이 둘을 명확히 구분하지 않고 합쳐서 데이터 모델링이라 칭함)
개체-관계 모델
개체 : DB에 저장될 수 있는 구체적인 실세계의 객체나 개념을 나타내는 개념적인 모델이고, DB에서는 테이블로 구현
인스턴스 : 개체를 구성하는 속성의 실체로 개체의 특정한 예를 의미, DB에서는 테이블의 행으로 구현
속성 : DB에서 개체의 특성이나 성질을 나타내는 필드나 열을 의미, 각 속성은 개체의 특정 측면을 설명
단일 값 속성 : 특정 개체를 구성하는 속성 값이 하나
다중 값 속성 : 속성이 값을 여러 개 가짐
단순 속성 : 의미를 더는 분해할 수 없는 속성
복합 속성 : 의미를 분해할 수 있어 값이 여러 개의 의미를 포함
유도 속성 : 저장된 값이 없이 기존의 다른 속성 값에서 유도되어 결정되는 속성
널 속성 : 아직 결정되지 않았거나 모르는 값을 의미
키 속성 : 각 개체 인스턴스들을 식별하는 데 사용
※DB를 설계할 때 다중 값 속성을 고려해야 함
예를 들어, 전화번호라는 속성이 있다고 가정한다. 만약 다중 값 속성을 고려하지 않고 스키마를 설계했다가 나중에 다중 값을 허용해야 하는 상황이 발생할 수 있음. 이를 해결하기 위해 별도의 테이블을 생성해야 될 수도 있음. 또는 단일 값 속성을 다중 값 속성으로 변환시킬 수도 있음. 하지만 DB는 다중 값 속성을 비효율적이라 보기 때문에 일반적으로 별도의 테이블로 분리하여 관리함. 이때 발생하는 특정 속성 값의 중복을 불가피함.
관계 : 개체와 개체가 맺고 있는 의미 있는 연관성
일대일 관계 : 한 테이블의 각 행이 다른 테이블의 각 행과 하나의 고유한 관계를 가짐
일대다 관계 : 한 테이블의 각 행이 다른 테이블의 여러 행과 관계를 가짐
다대다 관계 : 한 테이블의 여러 행이 다른 테이블의 여러 행과 관계를 가짐
관계의 참여 특성 : 모든 개체 인스턴스가 관계에 반드시 참여해야 된다면 필수적 참여, 그렇지 않다면 선택적 참여라 부름
관계의 종속성 : 한 개체의 존재가 다른 개체에 의존
논리적 데이터 모델 : E-R 다이어그램으로 표현된 개념적 구조를 DB에 저장한다고 할 때 저장 형태로 표현한 논리적 구조
계층 데이터 모델 : DB의 논리적 구조가 트리 형태
네트워크 데이터 모델 : DB의 논리적 구조가 그래프 또는 네트워크 형태
관계 데이터 모델의 기본 용어
릴레이션 : 흔히 테이블이라 부름
속성(애트리뷰트) : 릴레이션의 열
튜플(레코드) : 릴레이션의 행
도메인 : 속성 하나가 가질 수 있는 모든 값의 집합_데이터 타입, 값의 범위, 제약 조건 등
널 값 : 릴레이션에 있는 특정 튜플의 속성 값을 모르거나, 적합한 값이 없는 경우 사용
차수 : 하나의 릴레이션에서 속성의 전체 개수
카디널리티 : 하나의 릴레이션에서 튜플의 전체 개수
릴레이션과 데이터베이스의 구성
릴레이션 스키마 : 릴레이션의 이름과 이에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조
릴레이션 인스턴스 : 릴레이션 스키마의 구조에 따라 실제로 저장된 데이터
데이터베이스 스키마 : 특정 데이터베이스에 설계된 모든 릴레이션 스키마를 포함하는 전체 구조
데이터베이스 인스턴스 : 데이터베이스 스키마의 구조에 따라 실제로 저장된 모든 데이터
릴레이션의 특성
1. 하나의 릴레이션에 동일한 튜플이 존재할 수 없음
2. 하나의 릴레이션에서 튜플 사이의 순서는 무의미
3. 하나의 릴레이션에서 속성 사이의 순서는 무의미
4. 속성 값으로 원자 값만 사용할 수 있음
키의 종류
기본키 : 테이블에서 각 레코드를 고유하게 식별하는 필드로, NULL값을 가질 수 없음
후보키 : 기본 키로 사용할 수 있는 유일성과 최소성을 가진 필드의 집합
대체키 : 후보 키 중에서 기본 키로 선택되지 않은 나머지 키
외래키 : 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정하는 필드
슈퍼키 : 유일성을 보장하는 하나 이상의 필드로 이루어진 집합
복합키 : 둘 이상의 필드로 구성된 기본 키
관계 데이터 모델의 제약
개체 무결성 제약조건 : 모든 테이블의 기본키는 NULL 값을 가질 수 없고, 각 레코드에서 고유해야 함
참조 무결성 제약조건 : 외래키는 참조하는 테이블의 기본키 또는 고유키 값과 일치하거나 NULL이어야 하며, 테이블 간의 관계를 유지
관계 대수
일반 집합 연산자 / 순수 관계 연산자
SQL 데이터 정의 기능
테이블 생성
CREATE TABLE 테이블_이름 (
속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]
[PRIMARY KEY(속성_리스트)]
[UNIQUE(속성_리스트)]
[FOREIGN KEY(속성_리스트) REFERENCES 테이블_이름(속성_리스트)]
[ON DELETE 옵션] [ON UPDATE 옵션]
[CONSTRAINTS 이름] [CHECK(조건)]
);
테이블 변경
#새로운 속성 추가
ALTER TABLE 테이블_이름
ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];
#기존 속성 삭제
ALTER TABLE 테이블_이름 DROP COLUM 속성_이름;
#새로운 제약조건 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;
#기존 제약조건 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;
테이블 삭제
DROP TABLE 테이블_이름;
SQL의 데이터 조작 기능
데이터 검색
#기본 코드
SELECT 속성1, 속성2, ..., 속성n FROM 테이블_이름;
#모든 속성 검색
SELECT * FROM 테이블_이름;
#특정 속성 검색
SELECT 속성2, 속성7 FROM 테이블_이름;
#중복 허용 검색
SELECT ALL 속성_이름 FROM 테이블_이름;
#중복 제거 검색
SELECT DISTINCT 속성_이름 FROM 테이블_이름;
#산술식을 이용한 검색(+, -, *, /)
SELECT 속성 + K FROM 테이블_이름;
#속성 이름 변경하여 검색(AS 생략 가능)
SELECT 속성_이름 AS 변경할_이름 FROM 테이블_이름;
#조건 검색
SELECT 속성_이름 FROM 테이블_이름 WHERE 조건;
#LIKE를 이용한 검색
SELECT 속성_이름 FROM 테이블_이름 WHERE 속성_이름 LIKE '@';
#NULL을 이용한 검색
SELECT 속성_이름 FROM 테이블_이름 FROM 속성_이름 IS NULL;
SELECT 속성_이름 FROM 테이블_이름 FROM 속성_이름 IS NOT NULL;
#정렬 검색(ASC : 오름차순, DESC : 내림차순)
SELECT 속성_이름 FROM 테이블_이름 WHERE 조건 ORDER BY 속성_리스트 ASC/DESC;
#집계 함수를 이용한 검색
SELECT @(속성_이름) FROM 테이블_이름;
#그룹별 검색_SELECT 절에 나누는 기준이 되는 속성을 작성하는 것이 좋음
SELECT 속성_이름 FROM 테이블_이름 GROUP 속성_이름;
#그룹별 검색_HAVING_GROUP BY 에 대한 조건
SELECT 속성_이름 FROM 테이블_이름 GROUP 속성_이름 HAVING 조건;
#여러 테이블에 대한 조인 검색 예시
SELECT 테이블1.속성 FROM 테이블1, 테이블2 WHERE 테이블1.속성 = ' ' AND 테이블1.속성 = 테이블2.속성;
#부속 질의문을 이용한 검색
SELECT 속성_이름 FROM 테이블_이름 WHERE 속성_이름 = (SELECT 속성_이름 FROM 테이블_이름 WHERE 조건);
#다중 행 부속 질의문을 이용한 검색
SELECT 속성_이름 FROM 테이블_이름 WHERE 속성_이름 @ (SELECT 속성_이름 FROM 테이블_이름 WHERE 조건);
데이터 삽입
#데이터 직접 삽입
INSERT INTO 테이블_이름 VALUES 속성값_리스트;
#부속 질의문을 이용한 데이터 삽입
INSERT INTO 테이블_이름 SELECT 문;
데이터 수정
UPDATE 테이블_이름 SET 속성_이름1 = 값1, 속성_이름2 = 값2, ... [WHERE 조건];
데이터 삭제
DELETE FROM 테이블_이름 [WHERE 조건];
뷰의 개념
뷰 : DB에서 하나 이상의 테이블을 기반으로 생성된 가상 테이블로, 실제 데이터를 저장하지 않고, 저장된 데이터에 대한 특정 쿼리의 결과를 마치 테이블처럼 보여줌
뷰의 장점
1. 사용자가 접근할 수 있는 데이터 범위를 제한하여 정보를 보호
2. 복잡한 쿼리를 단순화하여 사용자가 쉽게 데이터를 조회
3. 기본 테이블의 구조가 변경되더라도 뷰를 통해 접근하는 애플리케이션에 영향을 주지 않음
4. 자주 사용되는 쿼리를 뷰로 정의하여 재사용할 수 있음
뷰의 생성
CREATE VIEW 뷰_이름[(속성_리스트)] AS SELECT 문 [WITH CHECK OPTION];
뷰의 활용
#CREATE VIEW 문으로 생성된 뷰에서도 일반 테이블처럼 원하는 데이터 검색 가능
SELECT * FROM 뷰_이름 [WHERE 조건];
#INSERT 문, UPDATE 문, DELETE 문도 뷰를 대상으로 수행 가능
INSERT INTO 뷰_이름 VAULES [속성_리스트];
※변경이 불가능한 뷰
1. 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰는 변경할 수 없음
2. 기본 테이블에 있던 내용이 아니라 집계 함수로 새로 계산된 내용을 포함하고 있는 뷰는 변경할 수 없음
3. DISTINCT 키워드를 포함하여 정의한 뷰는 변경할 수 없음
4. GROUP BY 절을 포함하여 정의한 뷰는 변경할 수 없음
5. 여러 개의 테이블을 조인하여 정의한 뷰는 변경할 수 없는 경우가 많음
뷰의 삭제
DROP VIEW 뷰_이름;
삽입 SQL WITH Pytnon
#라이브러리 선언
import pymysql
#데이터베이스 연결
conn = pymysql.connect(host = 'localhost', user = 'root', password = '패스워드_입력', db = 'DB_이름_입력', charset = 'utf8')
#커서 생성
curs = conn.cursor()
#SQL 문 실행
sql = 'select * from 테이블_이름'
curs.execute(sql)
#데이터 가져오기
data = curs.fetchall()
data[0]
data[1]
#연결 끊기
conn.close()