라벨이 데이터베이스인 게시물 표시

데이터베이스 정규화 과정

이미지
 데이터베이스 정규화 과정 정규화 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 릴레이션을 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정입니다. 작은 릴레이션으로 분해하는 과정은 함수 종속성을 제거하는 과정입니다. 정규화를 통해 릴레이션은 손실이 없는 무손실 분해가 되어야 합니다. 정규형(Normal Form) 릴레이션을 분해하는 각 단계를 거칠 때 마다 나타내지는 정규화의 형태 를 정규형이라고 합니다. 정규형은 릴레이션이 정규화가 된 정도(1정규형, 2정규형, ...)를 의미합니다. ※ 정규형의 정도(차수)가 높아질수록 릴레이션의 특성에 따라 요구되는 제약조건이 많아지고 엄격해짐 정규형의 종류 ※ 모든 정규형들은 비정규형 릴레이션의 부분집합의 형태 기본 정규형 제1정규형 - 릴레이션의 모든 속성이 더는  분해되지 않는 원자값만 가지면  제1정규형을 만족 - 제1규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음 - 하나의 속성에 여러개의 속성값이 아닌 하나의 속성값이여야 제1규형을 만족 이상현상이 발생하는 이유 - 기본키인 {고객아이디, 이벤트번호}에 완전 함수종속이 되지 못하고 부분집합의 일부분인 고객아이디에 종속되는 속성이 존재하기 때문에 이상현상이 발생 문제 해결 방법 - 부분 함수 종속이 제거되도록 릴레이션을 분해하면 분해된 릴레이션은 제2정규형 에 속하게 됨 제2정규형 - 제1정규형에서 부분 함수 종속을 제거하고 모든 함수 종속 관계에서 완전 함수 종속을 만족하면 제 1규형을 만족 - 완전 함수 종속만 가질 수 있도록 부분 함수 종속을 제거 ex) 고객릴레이션과 이벤트 참여 릴레이션으로 분해 이상현상이 발생하는 이유 - 이행적 함수 종속이 존재하기 때문 이행적 함수 종속: 3개의 속성간에 발생하는 문제 ※이행적 함수 종속이란? 릴레이션을 구성하는 속성들간에 가지는 관계입니다. 완전 함수 종속과 부분 함수 종속은 2개의 속성간에 이루어지는 관계 이지만 이행적 함수 종속은...

데이터베이스 함수종속

이미지
 데이터베이스 함수종속 함수 종속 이상현상을 해결해나가는 과정을 정규화 라고 합니다. 정규화는 여러가지 단계에 걸쳐서  정규화 과정을 거치게 되는데, 이 때 각각의 단계를 정규형 이라고 합니다. 각각의 정규형들은 특정 함수 종속들을 제거하는것으로 정규화 과정을 진행합니다. 종속된다는 것은 하나의 속성이 다른 하나의 속성을 결정한다는 의미 입니다. "X가 Y를 함수적으로 결정한다" - Y의 값은 X에 값에 의해서 결정됨 - "Y가 X에 함수적으로 종속되어 있다"와 같은 의미 - X → Y 로 표현 ( X는 결정자, Y는 종속자 ) 고객 릴레이션에 존재하는 함수 종속 관계 ※ 고객아이디가 기본키(PK: 프라이머리 키) 고객아이디  → 고객이름 고객아이디  → 등급 고객아이디  → (고객이름, 등급) 고객아이디는 고객이름과 등급 속성을 결정 or 고객이름과 등급 속성은 고객아이디에 종속  함수 종속 다이어그램 함수 종속 관계를 E-R 다이어그램으로 도식화하여 표현한것입니다. 화살표를 받는 쪽이 종속자 이고 화살표가 시작하는 부분이 결정자 입니다. 함수 종속을 판단 할 때에는 한 릴레이션을 구성하고 있는 여러 속성들 중에서 속성 자체에서 가지는 특성이나 의미를 기반 으로  함수 종속성을 판단해야 합니다. 속성값은 계속 변할 수 있기 때문에 현재 릴레이션에 포함된 속성 값만으로 판단하면 안됩니다. 일반적으로 기본키와 후보키 는 릴레이션의 다른 모든 속성들을 함수적으로 결정합니다. 혹은 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성도 함수 종속 관계에서 결정자가 될 수 있습니다. 완전 함수 종속(Full Function Dependency) 함수 종속 관계를 가지고 있는 복합 속성일 때에만 대한 것입니다. 복합속성으로 집합을 이루고 있을 때 가지는 종속 관계가 집합을 이루지 않았을 때에는 성립되지 않는다는 성질을 완전 함수 종속이라고 합니다. 당첨 여부는 {고객아이디, 이벤트번호}에 완전 ...

데이터베이스 이상현상과 정규화

이미지
 데이터베이스 이상현상과 정규화 이상현상과 정규화의 개념 데이터베이스가 특정 현상에서  발생하는 오류현상을 이상현상 이라 하고 이상현상을 해결하기 위해 거쳐야 하는 단계를 정규화 라고 합니다. 이상현상은 삽입이상, 갱신이상, 삭제이상이 있습니다. 이 이상현상을 발생시키는 특정요인들을 함수종속 이라고 합니다. 이상현상 - 정상적이지 않은 동작 - 불필요한 데이터 중복 으로 인해 데이터들이 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용 이상현상의 종류 삽입 이상(insertion anomaly): 새로운 데이터(튜플)를 삽입하기 위해 내가 원하지 않는 불필요한 데이터(튜플)도 함께 삽입 해야 하는 문제 ex) 이벤트 당첨여부에 속성값이 Y, N만 존재 할 때 이벤트에 참여하지 않은 고객은 불필요한 NULL 값이 들어가거나 삽입하지 못하는 이상현상 갱신(수정)이상(update anomaly): 중복되는 튜플 중 일부만 변경하여 똑같은 데이터 임에도 데이터가 불일치하게 되는 모순의 문제 ex) 여러번 이벤트에 참여한 홍길동 고객의 등급이 'gold'에서 'vip'로 변경 되었는데 일부 튜플에 대해서만 등급이 수정된다면 홍길동은 'gold'와 'vip'등급을 둘 다 가지게 되는 모순이 발생 삭제 이상(deletion anomaly): 필요 없는 튜플을 삭제하면 내가 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실 의 문제 ex) 홍길동 고객이 이벤트를 참여 했기 때문에 발생했던 데이터들이 이벤트 참여를 취소해 이벤트 참여와 관련이 없는 반드시 필요한 고객아이디, 고객이름, 등급 데이터까지 모두 손실되는 문제 정규화 - 이상현상을 발생시키는 요인들을 제거 하고 이상현상이 일으키는 잘못된 에러 과정들을 일으키지 않도록 데이터베이스를 올바르게 다시 설계해 나가는 과정 - 이상현상이 발생하지 않도록 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 관련이 있는 속성들로만 구성하기 위해서 중복되어...

데이터베이스 관계데이터 모델의 키

이미지
 데이터베이스 관계데이터 모델의 키 관계모델의 키 키(key)는 릴레이션에서 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합 입니다. 모든 키는 유일성을 만족해야 합니다. 키의 특성 유일성: 릴레이션에서 모든 투플은 다른 키 값을 가져야 함 최소성: 꼭 필요한 최소한의 속성들로만 키를 구성 5가지 키의 종류 수퍼키(super key) - 나를 식별할 수 있는 모든 조합 - 유일성을 만족하는 속성이거나 속성들의 집합(복합 속성) - 유일성 ex) 고객아이디, (고객아이디, 고객이름), (고객이름, 주소) 등 괄호()는 복합 속성 후보키(candidate key) - 유일성과 최소성을 만족하는 속성 또는 속성들의 집합 - 수퍼키에 고객아이디가 중복되어 있지만 후보키에서는 중복이 필요없음 - 유일성, 최소성 ex) 고객아이디, (고객이름, 주소) 등 기본키(primary key) - 후보키 중에서 가장 기본적으로 1순위로 사용하기 위해 선택한 키 - 하나의 릴레이션에서 가장 중요한 정보를 기본키로 지정 - 후보키 중에서 단일 애트리뷰트(단일 속성)를 기본키로 지정 - 속성명에 밑줄로 표시 - NULL값 허용 안함 - 중복 허용 안함 - 유일성, 최소성 ex) 고객아이디 대체키(alternate key) - 기본키로 선택되지 못한 나머지 후보키 - 유일성, 최소성 ex) (고객이름, 주소) 외래키(foreign key) - 다른 릴레이션(테이블)의 기본키를 참조하는 속성 또는 속성들의 집합 - 다른 릴레이션에서 기본키를 빌려오는 키 - 다른 릴레이션들 간의 관계를 표현 -  참조되는 릴레이션의 기본키와 참조하는 릴레이션의 외래키 속성의 이름은 달라도 되지만 도메인(타입)은 같아야함 - 하나의 릴레이션에 외래키가 여러개 존재 할 수 있고 외래키를 기본키로 사용할 수 있음 참조하는 릴레이션: 외래키를 가진 릴레이션 참조되는 릴레이션: 기본키를 다른 릴레이션에 빌려주는 릴레이션 ex) 고객 릴레이션(참조되는 릴레이션) 고객아이디(기본키) , 고객이름,...

데이터베이스 데이터 조작어(DML) - 데이터 삽입, 수정, 삭제

이미지
데이터베이스 데이터 조작어(DML) 데이터 삽입, 수정, 삭제 데이터 직접 삽입 테이블에 튜플을 입력하는 것입니다. SELECT INTO 테이블명[(속성명1, 속성명2, ...)] VALUES (속성값1, 속성값2, ...); 대괄호[]는 생략가능 INTO 키워드: 튜플을 삽입할 테이블의 이름과 속성의 이름을 나열하고,  테이블명은 반드시 있어야 하지만 속성명은 생략이 가능 합니다. 속성명이 생략 되었을 때에는 내가 생성해 놓은 속성의 순서대로 값이 삽입 이 됩니다. VALUES 키워드: 삽입할 속성의 값들을 나열합니다. ※ 속성 값은 나열한 속성명의 순서대로 입력, 1:1로 대응 INSERT INTO 고객(고객아이디, 고객이름, 나이) VALUES('hong', '홍길동', '30'); 고객테이블에 고객아이디가 hong, 고객이름이 홍길동, 나이가 30인 새로운 고객의 정보를 삽입 - 모르는 속성 값은 속성명과 속성값을 넣지 않아도 되고,  모르는 속성값이 존재 할 경우에는 null값이 삽입이 됨 INSERT INTO 고객 VALUES('hong', '홍길동', 30); 테이블명 뒤에 속성명을 나열하지 않았을 경우에는 고객 테이블에 정의되어 있는 순서대로 1:1로 대응해서 삽입 - 모르는 속성값이 존재 할 경우에는 고객 테이블에 정의 되어 있는 순서대로 1:1로 대응해서 삽입해야하기 때문에 고객 테이블에 정의되어있는 순으로 반드시 NULL값을 입력 부속 질의문을 이용한 데이터 삽입 VALUES 키워드 대신 SELECT문을 이용해 다른 테이블에서 검색한 데이터를 삽입하는 것입니다. INSERT INTO 롯데제품(제품명, 재고량, 단가) SELECT 제품명, 재고량, 단가 FROM 제품 WHERE 제조업체 = '롯데'; 제품 테이블에서 제조업체가 롯데인 업체의 제품명, 재고량, 단가를 검색하여 롯데제품 테이블에 삽입  데이터 수정 튜플에 있는 값을 내가 원하는 값으로 수정하는 ...

데이터베이스 데이터 조작어(DML) - 집계함수 검색, 조인 검색

이미지
데이터베이스 데이터 조작어(DML) 집계함수 검색, 조인 검색 집계함수 검색 내가 원하는 값들을 통계적으로 계산한 결과를 검색하기 위해 사용합니다. 열 함수(column function)라고도 하고 개수, 합계, 평균, 최대값, 최소값의 계산 기능을 제공합니다. ※ NULL 속성값은 제외하고 계산 집계 함수는 WHERE절에서는 사용할 수 없고 SELECT절이나 HAVING 절에서만 사용 이 가능합니다. 숫자데이터에서만 사용 가능한 함수 SUM: 속성 값의 합계 AVG: 속성 값의 평균 모든 데이터에서 사용 가능한 함수 COUNT: 속성값의 갯수 MAX: 속성값의 최대값 MIN: 속성값의 최소값 1. 기본 집계 함수 검색 SELECT AVG(단가) FROM 제품; 제품 테이블에서 모든 제품의 단가 평균을 검색 SELECT SUM(재고량) AS 재고량 합계 FROM 제품 WHERE 제조업체 = '롯데'; 제품 테이블에서 제조업체가 롯데인것만 속성명 재고량을 재고량 합계로 변경후 재고량을 합해서 검색  SELECT COUNT(고객아이디) AS 고객수 FROM 고객; 고객 테이블에서 고객이 몇명 등록이 되어있는지 검색하고 속성명 고객아이디를 고객수로 변경 ※ 널 값은 제외하고 튜플을 세기 때문에 정확한 튜플의 수를 셀 때에는 속성명에 * (아스타리크)를 사용하거나 기본키 속성을 사용 (기본키는 널값을 허용하지 않기 떄문에) SELECT COUNT(DISTINCT 제조업체) AS '제조업체수' FROM 제품; 제품 테이블에서 속성명 제조업체를 제조업체수로 변경하고 튜플의 중복을 없애고 제조업체의 수를 검색 2. 그룹별 검색 SELECT [ALL | DISTINCT] 속성명 FROM 테이블명 [WHERE 조건] [GROUP BY 속성명 [HAVING 조건]] [ORDERBY 속성명 [ASC | DESC]; 대괄호[] 안에 있는 키워드는 필요없으면 생략 가능 GROUP BY 키워드를 이용해 특정 속성의 값이 같은 튜플을 모아 그룹을 만들고 ...

데이터베이스 데이터 조작어(DML) - 조건검색, 정렬검색

이미지
데이터베이스 데이터 조작어(DML) 조건검색, 정렬검색 조건검색: WHERE SLECT문과 같이 사용하는 WHERE 키워드는 논리 연산자와 비교 연산자로 조건을 만족 하는 데이터만 검색 할 수도 있습니다. 비교 연산자 = 같다 <> 다르다 < 작다 > 크다 <= 작거나 같다 >= 크거나 같다 ※왼쪽을 기준으로 읽음 논리 연산자 AND 모든 조건을 만족해야 검색 OR 여러 조건 중 하나만 만족해도 검색 NOT 조건을 만족하지 않는 것만 검색 조건 검색 방법 SELECT [ALL | DISTINCT] 속성명 FROM 테이블명 [WHERE 속성명 논리연산 비교연산]; 대괄호[]는 생략가능 WHERE절은 무조건 테이블명 뒤에 나와야 합니다. 숫자 뿐만 아니라 문자나 날짜 값을 비교하는것도 가능하며  문자나 날짜 값을 비교 할 때는 작은 따옴표 로 묶어서 표현합니다. SELECT 제품명, 재고량, 단가 FROM 제품 WHERE 제조업체='롯데';  -속성명 제품명, 재고량, 단가를 제품 테이블에서 제조업체가 롯데인것만 검색 SELECT 주문제품, 주문일자 FROM 주문 WHERE 주문고객='홍길동' AND 수량 >= 15;  - 속성명 주문제품, 주문일자를 주문 테이블에서 홍길동이 15개 이상 주문한것만 검색 SELECT 주문제품, 주문일자 FROM 주문WHERE 주문고객='홍길동' OR 수량 >=15; - 속성명 주문제품, 주문일자를 주문고객이 홍길동이거나 15개 이상 주문한것만 검색 - 주문고객이 홍길동인것은 모두 검색 (수량이 15개 이하도 검색됨) - 수량이 15개 이상인것은 모두 검색 (주문고객이 홍길동이 아니여도 갬색됨) SELECT 제품명, 단가 FROM 제품 WHERE 단가 >= 2000 AND 단가 <= 3000; - 속성명 제품명, 단가를 제품 테이블에서 단가가 2000원 이상이고, 3000원 이하인것만 검색 LIKE를 이용한 검색 LIKE는 부분적으로 일...

데이터베이스 데이터 조작어(DML) - 기본검색

이미지
 데이터베이스 데이터 조작어(DML) 데이터 조작어는 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 튜플을 삽입, 삭제, 수정, 검색 을 처리를 요구 하는데 사용하는 언어입니다. 테이블을 생성 했으면 튜플을 속성에 맞춰 넣을 수 있습니다. 데이터 정의어(DDL) 는 테이블(릴레이션)을 속성과 함께 생성 하고 속성, 제약조건 등을 추가 하거나 삭제, 테이블을 삭제를 하는 릴레이션 스키마 위주로 작업 합니다. 데이터 조작어(DML) 는 테이블(릴레이션) 의 튜플을 다룰 수 있습니다.  테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정, 삭제, 검색하는 기능을 제공합니다. SQL의 데이터 조작 기능 4가지  · 데이터 검색( SELECT ) : 테이블에서 조건에 맞는 튜플을 검색   ·  데이터 삽입( INSERT ): 테이블에서 새로운 튜플을 삽입   ·  데이터 수정( UPDATE ): 테이블의 조건에 맞는 튜플의 내용을 변경  · 데이터 삭제( DELETE ): 테이블의 조건에 맞는 튜플을 삭제 데이터 검색: SELECT 1. 기본검색 SELECT * FROM 고객; 고객테이블에 있는 모든 속성( * : 아스타리크) 을 검색.  SELECT [ALL | DISTINCT] 속성명 FROM 테이블명; ALL: 튜플 중복 검색 가능.  SELECT ALL 이름 FROM 고객; 고객테이블에 있는 이름 속성을 튜플 값 중복 허용해서 검색. DISTINCT: 튜플 중복이 안되게 검색 SELECT DISTINCT 이름 FROM 고객; 고객테이블에 있는 이름 속성을 튜플 값 중복 허용하지 않고 검색. ALL | DISTINCT 입력 생략가능 하지만 생략하면 기본값은 ALL 으로 중복검색 됩니다. 이 키워드를 사용하려면 무조건 속성절 앞 에 사용해야 합니다. SELECT 나이, 이름, 고객아이디, 등급 FROM 고객; 고객 테이블에 있는 나이, 이름...

데이터베이스 논리적 데이터 모델

이미지
 데이터베이스 논리적 데이터 모델 논리적 데이터 모델은 데이터 모델링 중의 하나 입니다. 논리적 데이터 모델은 개체 관계 모델의 E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 저장할 형태로 표현 한 논리적 구조 입니다.  이 개념적 데이터 모델의 결과를 가지고 바로 컴퓨터 세계로 옮기는 것이 아니라 논리적 데이터 모델링을 통해서 컴퓨터 세계에 조금 더 적합한 형태로 바꾸는 것입니다. 즉, 데이터 베이스에 조금 더 쉽게 저장할 형태인 것입니다. 데이터베이스의 논리적 구조는 데이터베이스 스키마입니다. 데이터베이스 스키마는 3단계의 종류가 있습니다.  - 외부  - 개념  - 내부 논리적 데이터 모델에는 관계데이터 모델, 계층 데이터 모델, 네트워크 데이터 모델 등이 있고, 이중에서 관계데이터 모델은 일반적으로 많이 사용되는 논리적 데이터 모델이기 때문에 가장 중요한 모델입니다. 관계데이터 모델  - 개체와 개체간의 관계를 표현  - 데이터베이스의 논리적 구조가 2차원 테이블 형태  - 개체를 설명하는 특징은 속성으로 구분 = 속성들의 집합 관계 데이터 모델의 기본 용어 릴레이션(relation)  - 하나의 개체에 관한 2차원 테이블(표)의 구조를 저장  - 파일 관리 시스템 관점에서 파일(file)에 대응 속성(attribute)  - 릴레이션의 열, 애트리뷰트  - 속성들의 집합 = 개체 타입  - 파일 관리 시스템 관점에서 필드(field)에 대응 튜플(tuple)  - 릴레이션의 행  - 속성들의 값  - 파일 관리 시스템 관점에서 레코드(record)에 대응 도메인(domain)  - 속성값의 타입 널(null)  - 속성 값을 아직 모르거나 해당되는 값이 없음을 표현  - 공백이나 0이 아님 차수(degree)  - 릴레이션에서 전체 속성 개수 카디널리티(cardi...

데이터베이스 데이터 정의어(DDL), 자료형(데이터 타입)

이미지
데이터베이스 데이터 정의어(DDL), 자료형(데이터 타입) 데이터 정의어(DDL) 데이터 정의어(DDL : Data Definition Language) 데이터베이스 구조를 정의하고 변경하는 언어 입니다.  스키마를 정의하거나 수정 또는 삭제 하기 위해 사용합니다. 쉽게 설명하면 테이블(표)를 만드는 것입니다. 질의문 끝에는 세미콜론(;) 으로 문장의 끝을 표시해야합니다. SQL 질의문은 대소문자를 구분하지 않지만 보기쉽게 포스팅에는 대문자로 표기하겠습니다. 테이블 생성 CREATE TABLE 테이블명 고객 테이블을 생성하는 예제를 만들어보겠습니다. CREATE TABLE 고객 ( 고객번호 INT NOT NULL, 속성명: 고객번호, 타입: INT, NOT NULL: NULL값 허용안함 아이디 VARCHAR (30), 속성명: 아이디, 타입: VARCHAR(글자수 30), NULL값 허용 등급 VARCHAR (30), 속성명: 등급, 타입: VARCHAR(글자수 30), NULL값 허용 이름 VARCHAR (100) NOT NULL, 속성명: 이름, 타입: VARCHAR(글자수 100), NULL값 허용안함 나이 INT NOT NULL, 속성명: 나이, 타입: INT, NULL값 허용안함 성별 VARCHAR(1) NOT NULL, 속성명: 성별, 타입: VARCHAR(글자수 1), NULL값 허용안함 주소 VARCHAR(255) NOT NULL, 속성명: 주소, 타입: VARCHAR(글자수 255), NULL값 허용안함 상세주소 VARCHAR(255) NOT NULL,   속성명: 상세주소, 타입: VARCHAR(글자수 255), NULL값 허용안함 연락처 VARCHAR(18) NOT NULL, 속성명: 연락처, 타입: VARCHAR(글자수 18), NULL값 허용안함 비상연락망 VARCHAR(18) DEFAULT '' 속성명: 비상연락망, 타입: VARCHAR(글자수 18), NULL값 허용, DEFAULT(기본값): 공백 PRIM...

이 블로그의 인기 게시물

자바스크립트 반복문 - while, do while

React useState

React 쓰는 이유