DB 정규화, 역정규화, 이상현상
·
Backend/DB
정규화RDB에서 중복을 제거하고, 데이터 구조를 논리적으로 분해하여 삽입, 삭제, 갱신 이상을 방지하고일관성 있는 구조를 만드는 과정제 1정규형 (1NF: First Normal Form)모든 컬럼은 원자값만 가져야 함👉 한 셀에는 하나의 값만 있어야 한다.수강 과목이 여러 값을 가짐 = `비정규형`정규화 후제 2정규형 (2NF: Second Normal Form)1NF 만족`부분 함수 종속 제거` 👉 기본 키가 복합키일 경우, 일부 키에만 의존하는 속성 제거기본 키 (학번, 수강 과목) → 하나의 학생이 여러 과목 수강성적은 기본키 전체에 종속 됨 = OK이름은 학번으로만 결정됨 = 부분 종속! (2NF 위반)제 3정규형 (Third Normal Form)2NF 만족이행적 함수 종속 제거 👉 A ..
스키마 3계층
·
Backend/DB
데이터베이스를 사용자와 시스템 관점에서 나누어 설계하기 위해 ANSI/SPARC 모델에서 제안한 개념총 3가지 수준으로 나누어 DB 정의외부 스키마 개념 스키마내부 스키마이 구조는 데이터 독립성을 보장하는 핵심 메커니즘이다.외부 스키마 (External Schema)사용자 관점의 스키마각 사용자 또는 응용프로그램이 보는 부분적인 데이터 구조하나의 DB에 대해 여러 개 존재 가능 (사용자마다 다름)-- 실제 테이블에는 이름, 나이, 급여, 주소 등이 있지만-- 외부 사용자 1은 이름과 급여만 조회하도록 설계SELECT name, salary FROM employees;개념 스키마 (Conceptual Schema)DB 전체를 통합적으로 표현한 논리 구조모든 사용자와 응용 프로그램에 공통으로 보이는 구조관계..
RDB와 NoSQL 비교
·
Backend/DB
RDB (Relational Database)관계형 데이터베이스는 가장 많이 사용되고 있는 DB 중 하나로, 데이터를 테이블 형태로 표현하여 구조화각 테이블은 `행`과 `열`으로 이루어져 있으며, 테이블 간의 관계를 맺어서 데이터를 조직적으로 관리// MySQL-- Users 테이블+----+--------+----------------------+| ID | Name | Email |+----+--------+----------------------+| 1 | 철수 | chulsoo@gmail.com |-- Orders 테이블 (user_id 외래 키)+----+----------+-----------+| ID | user_id | Product |+---..
키 (Key), 인덱스 (Index)
·
Backend/DB
KEY 는 DB에서 레코드를 고유하게 식별하는 데 사용되는 속성 또는 속성들의 집합을 의미Key의 종류이름설명슈퍼 키 (Super Key)유일성을 만족하는 키, ex) 학번 + 이름, 주민번복합 키 (Composite Key) 2개 이상의 속성을 사용한 키후보 키 (Candidate Key) 유일성과 최소성을 만족하는 키, 기본키가 될 수 있는 후보이므로 후보 키라고 불림기본 키 (Primary Key) 후보 키에서 선택된 키, NULL값과 중복 허용 X대체 키 (Surrogate Key) 후보 키 중에서 기본 키로 선택되지 않은 키외래 키 (Foreign Key) 어떤 테이블 간의 기본 키를 참조하는 속성테이블 간의 관계를 나타내기 위해 사용예시) 학생 테이블 학생ID 이름이메일학번반번호1철수chuls..
다익스트라 (Dijkstra)
·
PS/알고리즘
가중치가 있는 그래프에서 한 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘단, 모든 간선의 가중치는 0 이상핵심 이론인접 리스트로 그래프 구현최단 거리 배열 초기화값이 가장 작은 노드 선택최단 거리 배열 업데이트3, 4 반복하여 최단 거리 배열 완성1. 인접리스트로 그래프 구현인접 행렬로 구현해도 좋으나 시간 복잡도 측면에서 N크기가 클 것을 대비해 인접 리스트로 구현하는 게 나음그래프의 연결을 표현하기 위해 배열의 자료형은 `(노드, 가중치)` 형태로 선언하여 연결2. 최단 거리 배열 초기화출발 노드는 0, 나머지 노드는 무한으로 초기화이때 무한은 적당히 큰 값을 사용3. 값이 가장 작은 노드 구하기최단 거리 배열에서 현재 값이 가장 작은 노드 선택, 처음에는 출발 노드를 선택하면 됨4. ..
위상 정렬 (Topology Sort)
·
PS/알고리즘
위상 정렬은 사이클이 없는 방향 그래프(DAG, Directed Acyclic Graph)에서 노드 순서를 나열하는 알고리즘즉, 어떤 일을 하기 위해 선행되어야 할 작업들이 있을 때, 그 작업 수행 순서를 결정📌 사이클이 없는 방향 그래프여야만 위상 정렬 가능!핵심 이론위상 정렬은 다음가 같은 단계로 설명할 수 있음 각 노드의 진입 차수(in-degree)를 센다.진입 차수가 0인 노드들을 큐에 넣는다.큐에서 노드를 하나씩 꺼내어 결과에 넣고, 연결된 노드들의 진입 차수에서 1을 뺀다.새롭게 진입 차수가 0이 된 노드를 큐에 넣는다.모든 노드를 처리하면 끝.진입 차수 저장 1에서 2, 3을 가리키고 있으므로 D[2], D[3]을 각각 만큼 증가 (나머지 노드 동일)진입 차수 0인 노드 처리진입 차수가 ..
유니온 파인드 (Union Find)
·
PS/알고리즘
일반적으로 여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union연산두 노드가 같은 집합에 속해 있는지를 확인하는 find 연산으로 구성된 알고리즘`union 연산`: 각 노드가 속한 집합을 1개로 합치는 연산a, b가 a ∈ A, b ∈ B일 때, union (A, B)는 A∪B 의미`find 연산`: 특정 노드 a에 관해 a가 속한 집합의 대표 노드를 반환하는 연산a ∈ A일 때, find(a)는 A집합의 대표 노드 반환유니온 파인드 원리 이해유니온 파인드를 표현하는 일반적인 방법은 1차원 배열 이용처음에는 노드가 연결되어 있지 않으므로 각 노드가 대표 노드가 됨각 노드가 모두 대표 노드이므로 배열은 자신 인덱스 값으로 초기화2개의 노드를 선택해 각각의 대표 노드를 찾아 연결..
JDBC 프로젝트 생성
·
Backend/JAVA
JDBC 프로젝트 1. 프로젝트 생성 & build.gradleJDBC & Lombok 라이브러리 추가 코드// MySQL JDBC 드라이버 추가implementation 'com.mysql:mysql-connector-j:8.4.0' // lombok 추가compileOnly 'org.projectlombok:lombok:1.18.38'annotationProcessor'org.projectlombok:lombok:1.18.38'testCompileOnly 'org.projectlombok:lombok:1.18.38'testAnnotationProcessor 'org.projectlombok:lombok:1.18.38'2. Intellij Datasource 기능 설정3. SQL 파일 생성`jdb..