[데이터베이스] 정규화(Normalization)
·
CS 지식/[데이터베이스]
정규화 테이블 간 증복된 데이터를 허용하지 않는 것 중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고, DB 저장 용량 또한 효율적으로 관리할 수 있음 목적 데이터의 중복을 없애면서 불필요한 데이터를 최소화 시킴 무결성을 지키고, 이상 현상을 방지 테이블 구성을 논리적이고 직관적으로 할 수 있음 데이터베이스 구조 확장 용이 제 1정규화(1NF) 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것 조건 - 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있어야함 - 모든 속성에 반복되는 그룹이 나타나지 않음 - 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 함 현재 테이블은 전화번호를 여러 개 가지고 있어 원자값이 아님 따라서 1NF에 맞추기 위해 아래와 ..
[데이터베이스] 인덱스(Index)
·
CS 지식/[데이터베이스]
DB Index 목적 : RDBMS에서 검색 속도를 높이기 위한 기술 Table의 Column을 색인화 함 (따로 파일로 저장) → 해당 Table의 Record를 Full scan 하지 않음 → 색인화 된 (B+ Tree 구조로) Index 파일 검색으로 검색 속도 향상 과정 : Table을 생성하면, MYD, MYI, FRM 3개의 파일이 생성됨 FRM : 테이블 구조가 저장되어 있는 파일 MYD : 실제 데이터가 있는 파일 MYI : Index 정보가 들어가 있는 파일 → Index를 사용하지 않는 경우, MYI 파일은 비어져 있음 그러나, 인덱싱하는 경우 MYI 파일이 생성됨 이후에 사용자가 Select 쿼리로 Index를 사용하는 Column을 탐색 시, MYI 파일의 내용을 검색함 단점 Ind..
[데이터베이스] 이상(Anomaly)
·
CS 지식/[데이터베이스]
정규화를 해야하는 이유 → 잘못된 테이블 설계로 인해 이상 현상이 나타나기 때문 1. 삽입 이상 (Insertion Anomaly) 기본키가 {Student ID, Course ID} 인 경우 -> Course를 수강하지 않은 학생은 Course ID가 없는 현상이 발생함. 결국 Course ID를 Null로 할 수밖에 없는데, 기본키는 Null이 될 수 없으므로, Table에 추가될 수 없음 굳이 삽입하기 위해서는 '미수강'과 같은 Course ID를 만들어야 함 불필요한 데이터를 추가해야지, 삽입할 수 있는 상황 = Insertion Anomaly 2. 갱신 이상 (Update Anomaly) 만약 어떤 학생의 전공 (Department) 이 "컴퓨터에서 음악"으로 바뀌는 경우 모든 Departmen..
[데이터베이스] SQL과 NOSQL의 차이
·
CS 지식/[데이터베이스]
SQL (관계형 DB) SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색할 수 있음 핵심적인 두 가지 특성 데이터는 정해진 데이터 스키마에 따라 테이블에 저장됨 데이터는 관계를 통해 여러 테이블에 분산됨 데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있음 해당 구조는 필드의 이름과 데이터 유형으로 정의됨 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없음 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나 또한, 데이터의 중복을 피하기 위해 ‘관계’를 이용함 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 ..
[데이터베이스] SQL Injection
·
CS 지식/[데이터베이스]
해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 공격 방법 1) 인증 우회 보통 로그인을 할 때 아래와 같은 쿼리로 전송될 것 SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; SQL Injection으로 공격할 때, input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것 1234; DELETE * USER FROM ID = "1"; 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 일치해서 True가 되고 뒤에 작성한 DELETE 문도 데이터베이스에 영향을 줄 수도 있게 되는 피명적인 상황 이 밖에도 기본 쿼리문의 WHERE 절에 OR문을 추가하여 '1' = '1'과 ..
[데이터베이스] JOIN
·
CS 지식/[데이터베이스]
조인이란? 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법 테이블을 연결하려면, 적어도 하나의 컬럼을 서로 공유하고 있어야하므로 이를 이용하여 데이터 검색에 활용함 Join 종류 INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN SELF JOIN 1) INNER JOIN 교집합 기준 테이블과 조인 테이블의 중복된 값을 보여줌 SELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP 2) LEFT OUTER JOIN 기준 테이블 값과 조인 테이블과 중복된 값을 보여줌 왼쪽 테이블 기준으로 JOIN을 한다고 생각하면 ..