데이터의 중복을 줄이고, 무결성을 향상시키는 정규화 # Normalization 목적 테이블 간의 중복된 데이터를 허용하지 않기 위함 중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고 데이터베이스의 저장 용량 또한 효율적으로 관리할 수 있음 - 데이터의 중복을 없애면서 불필요한 데이터를 최소화시킴 - 무결성을 지키고, 이상 현상을 방지 - 테이블 구성을 논리적이고 직관적으로 할 수 있음 - 데이터베이스 구조 확장에 용이 # 정규화 단계 제 1 정규화 -> 제 2 정규화 -> 제 3 정규화 -> BCNF -> 제 4 정규화 -> 제 5 정규화 ... 의 단계 일반적으로 제 3 정규화 또는 BCNF 까지만 하는 경우가 많음 # 정규화 장점 - 데이터베이스 변경 시 이상 현상을 제거할 수 있음 - 정규..
CS공부/Database
# DB Index 목적 RDBMS에서 검색 속도를 높이기 위함 Table의 Column을 색인화 -> 파일로 따로 저장 - 해당 Table의 레코드를 전부 scan 하지 않음 - 색인화된 B+ Tree 구조 Index 파일 검색으로 검색 속도 향상 # Index 과정 Table을 생성하면 MYD, MYI, FRM 3개의 파일이 생성됨 - FRM : 테이블 구조가 저장되어 있는 파일 - MYD : 실제 데이터가 있는 파일 - MYI : Index 정보가 들어가 있는 파일 Index를 사용하지 않는 경우 MYI 파일은 비워져 있음 -> 인덱싱을 하면 MYI 파일이 생성 이후에는 사용자가 SELECT 쿼리로 Index를 사용하는 Column을 탐색 시, MYI 파일의 내용을 검색함 # 단점 - Index 생..
정규화를 해야하는 이유는 뭘까? 정규화를 하지 않으면 잘못된 테이블 설계로 인한 Anomaly 이상현상 이 나타나기 때문 1. 삽입 이상 Insertion Anomaly 기본키가 { StudentID, CourseID } 인 경우 => Course를 수강하지 않은 학생은 CourseID 가 없는 현상 발생 결국 CourseID를 NULL 값으로 할 수 밖에 없지만 기본키에는 NULL 값이 들어갈 수 없음 ===> Table에 삽입되지 못 하는 현상 발생 2. 갱신 이상 Update Amomaly 만약 어떤 학생의 전공 { Department } 이 "컴퓨터" -> "음악" 으로 변경되는 경우 모든 Department 를 "음악" 으로 바꾸어야 함 그러나 일부를 깜빡하고 바꾸지 못하는 경우 제대로 파악하지..
웹 앱 개발 시, 데이터베이스를 선택할 때의 고민 MySQL과 같은 SQL을 사용할까? 아니면 MongoDB 같은 NoSQL을 사용할까? 보통 Spring에서 개발할 때는 MySQL을, Node.js.에서는 MongoDB를 주로 사용함 -> 왜 그럴까? 단순히 프레임워크에 따라 결정하는 것은 아님 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 선택해야 함 #차이점 - SQL (관계형 DB) SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색 가능 관계형 데이터베이스의 핵심적인 두 가지 특징 1. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장됨 2. 데이터는 관계를 통해 여러 테이블에 분산됨 데이터는 테이블에 레코드로 저장 -> 각 테이블마다 명확하게 정의된 구조가 있음 해당 구조..
# SQL Injection 이란? 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 # SQL Injection 공격 방법 1. 인증 우회 보통 로그인 시, 아이디와 비밀번호를 input 창에 입력함 예를 들어, 아이디가 abc 비밀번호가 1234 일 때 다음과 같은 방식으로 쿼리가 전송됨 SELECT * FRON USER WHERE ID = "abc" AND PASSWORD = "1234"; SQL Injection 으로 공격할 때 input 창에 비밀번호를 입력함과 동시에 다른 쿼리문이 함께 입력됨 1234; DELETE * USER FROM ID = "1"; 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 일치해서 True가 되고 뒤에 ..
#Join이란? 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법 테이블을 연결하려면, 적어도 하나의 칼럼을 서로 공유하고 있어야 함 -> 이를 이용하여 데이터 검색에 활용 #Join 종류 - INNER JOIN - LEFT OUTER JOIN - RIGHT OUTER JOIN - FULL OUTER JOIN - CROSS JOIN - SELF JOIN # INNER JOIN 교집합 기준 테이블과 Join 테이블의 중복된 값을 보여줌 SELECT 기준테이블.컬럼명, JOIN테이블명.컬럼명 FROM 기준테이블 INNER JOIN JOIN테이블 ON 기준테이블.컬럼명 = JOIN테이블.컬럼명 # LEFT OUTER JOIN 기준 테이블 값과 조인 테이블과 중복된 값 왼쪽 테이블 기준으로..
# Key 란? 검색, 정렬 시 Tuple을 구분할 수 있는 기준이 되는 Attribute 1. 후보키 Candidate Key Tuple을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합 기본키로 사용할 수 있는 속성들 유일성과 최소성을 만족함 - 유일성 : Key 로 하나의 Tuple을 유일하게 식별 가능 - 최소성 : 꼭 필요한 최소한의 속성으로만 구성 2. 기본키 Primary Key 후보키 중에 선택한 메인키 Null 값을 가질 수 없음 동일한 값이 중복될 수 없음 3. 대체키 Alternate Key 후보키 중 기본키를 제외한 나머지 키들 4. 슈퍼키 Super Key 유일성은 만족 최소성은 만족하지 못 함 5. 외래키 Foreign Key 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합