❓
물음표살인마 블로그
  • README
  • ALGORITHM
    • Sieve of Eratosthenes
    • Round Up
    • Binary Search
    • Union Find
    • Sorting Array
    • Lcm, Gcd
  • TechTalk Review
    • Template
  • Books
    • CS Note for Interview
      • Ch1. Design Pattern & Programming paradigm
        • 1.1.1 Singleton Pattern
        • 1.1.2 Factory Pattern
        • 1.1.4 Observer Pattern
        • 1.1.5 Proxty Pattern & Proxy Server
        • 1.1.8 Model-View-Controller Pattern
        • 1.2.1 Declarative and Functional Programming
        • 1.2.2 Object Oriented Programming
      • Ch2. Network
        • 2.2.1 TCP/IP Four-Layer Model
        • 2.2.1-1 TCP 3, 4 way handshake
        • 2.3 Network Devices L4, L7
        • 2.4.1 ARP, RARP
        • 2.4.2 Hop By Hop Communication
        • 2.4.3 IP Addressing Scheme
      • Ch3. Operating System
        • 3.1.1 Roles and Structure of Operating Systems
        • 3.2.1 Memory Hierarchy
        • 3.2.2 Memory Management
        • 3.3.1 Processes and Compilation Process
        • 3.3.3 Memory Structure of a Process
        • 3.3.4 Process Control Block (PCB)
        • 3.3.5 Multiprocessing
        • 3.3.6 Threads and Multithreading
        • 3.3.7 Shared Resources and Critical Sections
        • 3.3.8 Deadlock
        • 3.4 CPU Scheduling Algorithm
      • Ch4. Database
        • 4.1 Database Basic
        • 4.2 Normalization
        • 4.3 Transaction and Integrity
        • 4.4 Types of Databases
        • 4.5 Indexes
        • 4.6 Types of Joins
        • 4.7 Principles of Joins
      • Ch5. Data Structure
    • Learning the Basics of Large-Scale System Design through Virtual Interview Cases
      • 1. Scalability based on user counts(1/2)
      • 1. Scalability based on user counts(2/2)
      • 2.Back-of-the-envelope estimation
      • 3. Strategies for System Design Interviews
      • 4. Rate Limiter
      • 5. Consistent Hashing
      • 6. Key-Value System Design
      • 7. Designing a Unique ID Generator for Distributed Systems
      • 8. Designing a URL Shortener
      • 9. Designing a Web Crawler
      • 10. Notification System Design
      • 11. Designing a News Feed System
      • 12. Chat System Design
      • 13. AutoComplete
      • 14. Design YouTube
      • 15. Design Google Drive
      • Loadbalancer Algorithms
      • Cache tier
      • CDN, Content Delivery Network
      • Stateless Web tier
    • Computer System A programmer's perspective
    • Effective Java
      • Item 1. Consider Static Factory Methods Instead of Constructors
      • Item 2. Consider a Builder When Faced with Many Constructor Parameters
      • Item 3. Ensure Singleton with Private Constructor or Enum Type
      • Item 4. Enforce Noninstantiability with a Private Constructor
      • Item 5. Prefer Dependency Injection to Hardwiring Resources
      • Item 6. Avoid Creating Unnecessary Objects
      • Item 7. Eliminate Obsolete Object References
      • Item 8. Avoid Finalizers and Cleaners
      • Item 9.Prefer try-with-resources to try-finally
      • Item10. Adhering to General Rules When Overriding equals
        • Handling Transitivity Issues
        • Ensuring Consistency
      • Item11. Override hashCode When You Override equals
      • Item12. Always Override toString
        • Always Override toString
      • Item13. Override Clone Judiciously
      • Item14. Consider Implementing Comparable
      • Item15. Minimize the Accessibility of Classes and Members
      • Item16. Accessor Methods Over Public Fields
      • Item17. Minimize Mutability
      • Item18. Composition over inherentance
      • Item19. Design and Document for Inheritance, or Else Prohibit It
      • Item20. Prefer Interfaces to Abstract Classes
      • Item21. Design Interfaces with Implementations in Mind
      • Item22. Use Interfaces Only to define Types
      • Item23. Prefer Class Hierarchies to Tagged Classes
      • Item24. Favor Static Member Classes Over Non-Static
      • Item28. Use Lists Instead of Arrays
      • Item29. Prefer Generic Types
      • Item30. Favor Generic Methods
    • Head First Design Patterns
      • Ch1. Strategy Pattern
      • Ch2. Observer Pattern
        • Ver1. Ch2. Observer Pattern
      • Ch3. Decorator Pattern
        • Ch3. Decorator Pattern
      • Ch4. Factory Pattern
      • Ch5. Singleton Pattern
      • Ch6. Command Pattern
      • Ch7. Adapter and Facade Pattern
      • Ch8. Template Method Pattern
    • Digging Deep into JVM
      • Chapter 2. Java Memory Area & Memory Overflow
      • Chapter 3. Garbage Collector & Memory Allocation Strategy (1/2)
      • Chapter 3. Garbage Collector & Memory Allocation Strategy (2/2)
      • Chapter 5. Optimization Practice
      • Chapter 6. Class file structure
      • Chapter 8. Bytecode Executor Engine (1/2)
  • Interview Practices
    • Restful API Practices
      • Url Shortener API
      • Event Ticket Reservation API
      • Course Management API
      • Search posts by tags API
      • Online Code platform API
      • Simple Task Management API
      • Event Participation API
      • Review System API
      • Car management API
      • Online Library
    • Tech Review
      • if(kakao)
        • Kakao Account Cache Migration / if(kakao)2022
        • Improving the Anomaly Detection System for KakaoTalk Messaging Metrics / if(kakao) 2022
        • Standardizing API Case Handling Without Redeployment / if(kakaoAI)2024
        • JVM warm up / if(kakao)2022
    • Naver Computer Science
      • Process & Thread
      • TCP & UDP
      • Spring & Servlet
      • Filter & Interceptor & AOP
      • Equals() & ==
      • Dependency Injection
      • Object Oriented Programming
  • F-Lab
    • Week1
      • Client & Server
      • HTTP
      • TCP/UDP
      • REST API
      • Questions
        • Object Oriented Programming
        • HTTP
        • Process & Thread
        • Data Structure
    • Week2
      • OSI 7 layer
      • Web vs WAS
    • Week3
      • RDB vs NoSQL
      • RDB Index
      • Cache
      • Redis
      • Messaging Queue
    • Week4
      • Project - Ecommerce
    • Week5
      • ERD - 1
    • Week6
      • Ecommerce - 2
      • Role
      • pw hashing && Salt
      • CreatedAt, ModifiedAt
      • JWT
      • Copy of ERD - 1
    • Week7
      • Vault (HashiCorp Vault)
    • Week 8
      • Api Endpoints
    • Week10
      • Product Create Workflow
  • TOY Project
    • CodeMentor
      • Implementation of Kafka
      • Project Improvement (Architectural Enhancements)
      • Communication between servers in msa
  • JAVA
    • MESI protocol in CAS
    • CAS (Compare and Set)
    • BlockingQueue
    • Producer & Consumer
    • Synchronized && ReentrantLock
    • Memory Visibility
    • Checked vs Unchecked Exception
    • Thread
    • Batch delete instead of Cascade
    • Java Questions
      • Week 1(1/2) - Basic Java
      • Week 1(2/2) - OOP
      • Week 2(1/2) - String, Exception, Generic
      • Week2(2/2) Lambda, Stream, Annotation, Reflection
      • Week3(1/2) Collections
      • Week3(2/2) Threads
      • Week4 Java Concurrency Programming
      • Week5 JVM & GC
    • Java 101
      • JVM Structure
      • Java Compiles and Execution Method
      • Override, Overload
      • Interface vs Abstract Class
      • Primitive vs Object Type
      • Identity and equality
      • String, StringBuilder, StringBuffer
      • Checked Exceptions and Unchecked Exceptions
      • Java 8 methods
      • Try-with-reources
      • Strong Coupling and Loose Coupling
      • Serialization and Deserialization
      • Concurrency Programming in Java
      • Mutable vs Immutable
      • JDK vs JRE
  • SPRING
    • DIP. Dependency Inversion Principal
    • Ioc container, di practice
    • @Transactional
    • Proxy Pattern
    • Strategy Pattern
    • Template Method Pattern
    • using profile name as variable
    • Spring Questions
      • Spring Framework
      • Spring MVC & Web Request
      • AOP (Aspect-Oriented Programming)
      • Spring Boot
      • ORM & Data Access
      • Security
      • ETC
  • DATABASE
    • Enhancing Query Performance & Stability - User list
    • Ensuring Data Consistency, Atomicity and UX Optimization (feat.Firebase)
    • Redis: Remote Dictionary Server
    • Database Questions
      • Week1 DBMS, RDBMS basics
      • Week2 SQL
      • Week3 Index
      • Week4 Anomaly, Functional Dependency, Normalization
      • Week5 DB Transaction, Recovery
    • Normalization
      • 1st Normal Form
      • 2nd Normal Form
      • 3rd Normal Form
  • NETWORK
    • HTTP & TCP head of line blocking
    • HTTP 0.9-3.0
    • Blocking, NonBlocking and Sync, Async
    • Network Questions
      • Week1 Computer Network Basic
      • Week2(1/3) Application Layer Protocol - HTTP
      • Week2(2/3) Application Layer Protocol - HTTPS
      • Week2(3/3) Application Layer Protocol - DNS
      • Week3 Application Layer
      • Week4 Transport Layer - UDP, TCP
      • Week5 Network Layer - IP Protocol
    • Network 101
      • https://www.google.com
      • TCP vs UDP
      • Http vs Https
      • TLS Handshake 1.2
      • HTTP Method
      • CORS & SOP
      • Web Server Software
  • OS
    • Operating System Questions
      • Week1 OS & How Computer Systems Work
      • Week2(1/2) Process
      • Week2(2/2) Thread
      • Week3 CPU Scheduling
      • Week4 Process Synchronize
      • Week5 Virtual Memory
    • Operating System 101
      • Operating system
        • The role of the operating system
        • The composition of the operating system.
      • Process
        • In Linux, are all processes except the initial process child processes?
        • Zombie process, orphan process
        • (Linux) Daemon process
        • Process address space
        • Where are uninitialized variables stored?
        • Determination of the size of the Stack and Heap
        • Access speed of Stack vs Heap
        • Reason for memory space partitioning
        • Process of compiling a process
        • sudo kill -9 $CURRENT_PID
      • Thread
        • Composition of a thread's address space
      • Process vs Thread
        • Creation of processes and threads in Linux
      • Multiprocessing
        • Web Browser
        • Implementation of multiprocessing
        • Application areas of multiprocessing
      • Multithreading
        • Application areas of multithreading
      • Interrupt
        • HW / SW Interrupt
        • Method of handling interrupts
        • Occurrence of two or more interrupts simultaneously
      • Polling
      • Dual Mode
        • Reason for distinguishing between user mode and kernel mode
      • System call
        • Differentiation between system calls
        • Types of system calls
        • Execution process of a system call
      • Process Control Block (PCB)
        • PCB의 구조
        • 쓰레드는 PCB를 갖고 있을까?
        • 프로세스 메모리 구조
      • Context switching
        • Timing of context switching
        • Registers saved during context switching
        • Context switching in processes
        • Context switching in threads
        • Difference between context switching in processes and threads
        • Information of the current process during context switching
      • Interprocess Communication (IPC)
        • Cases where IPC is used
        • Process address space in IPC Shared Memory technique
        • Types of IPC
  • COMPUTER SCIENCE
    • Computer Architecture 101
      • 3 components of a computer
      • RAM vs ROM
      • CPU vs GPU
      • SIMD
      • Two's complement
      • Harvard Architecture vs. von Neumann Architecture
      • The structure of a CPU.
      • Instruction cycle (CPU operation method)
      • Instruction pipelining
      • Bus
      • Memory area
      • Memory hierarchy structure
        • Reason for using memory hierarchy structure
      • Cache memory
      • L1, L2, L3 Cache
      • Locality of reference (cache)
      • Fixed-point vs Floating-point
        • epresentation of infinity and NaN (Not a Number) in floating-point
      • RISC vs CISC
      • Hamming code
      • Compiler
      • Linking
      • Compiler vs Interpreter
      • Mutex vs Semaphore
      • 32bit CPU and 64bit CPU
      • Local vs Static Variable
      • Page
  • Programming Paradigm
    • Declarative vs Imperative
  • JPA, QueryDsl
    • why fetchResults() is deprecated
  • PYTHON
    • Icecream
  • FASTAPI
    • Template Page
  • LINUX
    • Template Page
  • DATA STRUCTURE
    • Counting Sort
    • Array vs Linked List
  • GIT, Github
    • git clone, invalid path error
  • INFRA
    • Template Page
  • AWS
    • Server Log Archive Pipeline
    • Image Processing using Lambda
  • DOCKER
    • Docker and VM
    • Python Executable Environment
    • Docker commands
  • docker-compose
    • Kafka, Multi Broker
  • KUBERNATES
    • !Encountered Errors
      • my-sql restarts
      • kafka producer: disconnected
    • Kubernetes Components
    • Helm
      • Helm commands
    • Pod network
    • Service network
      • deployment.yaml
      • services.yaml
    • Service type
      • Cluster IP
      • NodePort
    • service-name-headless?
    • kube-proxy
  • GraphQL
    • Template Page
  • WEB
    • Template Page
  • Reviews
    • Graphic Intern Review
    • Kakao Brain Pathfinder Review
    • JSCODE 자바 1기 Review
  • 😁Dev Jokes
    • Image
      • Plot twist
      • Priorities
      • SQL join guide
      • Google is generous
      • Genie dislikes cloud
      • buggy bugs
      • last day of unpaid internship
      • what if clients know how to inspect
      • its just game
      • how i wrote my achievement on resume
      • self explanatory
      • chr(sum(range(ord(min(str(not))))))
Powered by GitBook
On this page
  • 이상 현상이 뭘까요?
  • 삽입 이상에 대해서 설명해주세요.
  • 갱신 이상에 대해서 설명해주세요.
  • 삭제 이상에 대해서 설명해주세요.
  • 함수 종속성(Functional Dependency)가 뭔가요?
  • 완전 함수적 종속(Full Functional Dependency)가 뭔가요?
  • 부분 함수적 종속이 뭔가요?
  • 이행적 함수적 종속(Transitive Functional Dependency)가 뭔가요?
  • 정규화가 뭔가요?
  • 반정규화가 뭔가요?
  1. DATABASE
  2. Database Questions

Week4 Anomaly, Functional Dependency, Normalization

이상현상, 함수적 종속성, 정규화

이상 현상이 뭘까요?

  • 데이터베이스에서 테이블 설계가 비효율적이거나 잘못되었을 때 발생하는 데이터 무결성 문제. 보통 중복된 데이터 때문에 발생

  • 삽입 이상: 데이터를 삽입할때 불필요하거나 잘못된 데이터를 추가해야 하는 상황. 예를 들어, 테이블이 너무 많은 정보를 가지고 있어서 필요한 정보를 추가하려면 다른 불필요한 정보도 함께 추가해야 하는 경우

  • 갱신 이상: 데이터를 수정할 때 중복된 여러 항목에서 모두 수정해야 하며, 일부만 수정될 경우 데이터 불일치가 발생하는 문제 예를 들어, 한 테이블에 동일한 정보가 여러 군데 저장되어 있고, 한 곳만 수정하면 일관성이 깨집니다.

  • 삭제 이상: 데이터를 삭제할 때 의도치 않게 다른 중요한 데이터까지 함께 삭제되는 문제 특정 데이터를 삭제하면 그와 관련된 다른 중요한 데이터도 함께 삭제 또는 삭제되야하는 데이터가 남아있는 상황

정규화 과정을 통해 최소화하거나 해결할 수 있습니다.

삽입 이상에 대해서 설명해주세요.

  • 제대로 정규화가 이루어지지않은 테이블에 데이터를 삽입하게 될때, 불완전한 정보를 삽입하거나 NULL 값을 넣어야하는 상황.

  • 부서를 만들면 강제로 부서에 있는 직원 데이터도 같이 넣어야하는 문제

갱신 이상에 대해서 설명해주세요.

  • 여러 곳에 중복된 데이터가 저장되어 있을때, 그 데이터를 수정하면 모든 위치의 데이터도 갱신해야합니다.

  • 일부 데이터만 수정하게되면 데이터 일관성이 깨져 서로 다른 정보가 공존하는 문제 발생. (데이터 불일치)

삭제 이상에 대해서 설명해주세요.

  • 정규화가 제대로 이루어지지 않아서, 데이터를 삭제할때 삭제되지 말아야하는 데이터도 같이 삭제되는 문제.

  • 또는 중복된 데이터가 존재하여 삭제 되어야하는 데이터가 같이 삭제가 되지 않는 문제

함수 종속성(Functional Dependency)가 뭔가요?

  • 데이터베이스에서 어떤 속성의 값이 다른 속성의 값을 고유하게 결정하는 관계를 의미. 즉, 하나의 속성 값이 주어지면, 다른 속성 값이 반드시 하나로 결정되는 경우

  • 학번 → 이름: 학번이 주어지면, 그 학번에 해당하는 학생의 이름이 결정됩니다. 이때 학번은 결정자(Determinant)이고, 이름은 종속자(Dependent)

  • 완전 함수적 종속, 부분 함수적 종속, 이행적 함수적 종속

완전 함수적 종속(Full Functional Dependency)가 뭔가요?

  • 완전 함수적 종속이란, 어떤 속성(B)이 기본키(A) 전체에 대해 완전히 종속되어 있는 경우를 의미. 즉, 기본키의 일부가 아닌 전체에 의해 다른 속성이 결정될 때

예시: 학생 수강 테이블

학생 ID

수업 ID

교수명

점수

1001

C101

김교수

90

1001

C102

이교수

85

1002

C101

김교수

95

테이블의 기본키:

학생 ID와 수업 ID를 복합 기본키로 사용합니다. 이 두 속성이 함께 있어야 학생이 어떤 수업을 듣고 있는지 고유하게 식별할 수 있습니다.

1. 완전 함수적 종속:

점수는 학생 ID와 수업 ID가 둘 다 주어져야만 결정됩니다.

  • 예를 들어, 학생 ID 1001과 수업 ID C101을 함께 사용해야 그 학생이 김교수의 수업을 듣고, 점수가 90점이라는 것을 알 수 있습니다.

  • 학생 ID나 수업 ID 중 하나만으로는 점수가 무엇인지 알 수 없습니다. 두 개의 속성이 모두 있어야 점수가 결정되기 때문에, 점수는 완전 함수적 종속입니다.

2. 부분 함수적 종속과의 차이:

만약 교수명이 수업 ID에만 종속되어 있다면, 이것은 부분 함수적 종속에 해당합니다. 왜냐하면, 수업 ID만 주어져도 교수명을 알 수 있기 때문입니다.

  • 예를 들어, 수업 ID C101은 언제나 김교수가 담당합니다. 즉, 수업 ID 하나만으로도 교수명을 결정할 수 있으므로 교수명은 수업 ID에 대해 부분 함수적 종속입니다.

부분 함수적 종속이 뭔가요?

  • 어떤 속성(B)이 기본키 전체가 아닌 일부에만 종속되는 경우 이때, 속성 B는 기본키 일부에만 종속되므로, 기본키의 나머지 부분이 없어도 B의 값이 결정될 수 있습니다.

예시:

학생 ID (A1)
수업 ID (A2)
교수명 (B)

1001

C101

김교수

1002

C101

김교수

1001

C102

이교수

  • 여기서 학생 ID와 수업 ID가 복합 기본키입니다.

  • 그러나 교수명(B)은 수업 ID(A2) 하나만으로 결정됩니다. 즉, 학생 ID는 필요 없이 수업 ID만 있으면 교수명이 결정됩니다. 이는 부분 함수적 종속의 예입니다.

    • 교수명은 기본키 전체(학생 ID + 수업 ID)에 종속되지 않고, 수업 ID에만 종속됩니다.

이행적 함수적 종속(Transitive Functional Dependency)가 뭔가요?

  • 이행적 함수적 종속이란, A → B와 B → C라는 두 개의 함수적 종속이 있을 때, A → C의 종속 관계가 성립하는 것 즉, 속성 A가 속성 B를 결정하고, 속성 B가 속성 C를 결정할 때, 결과적으로 속성 A가 속성 C를 결정하는 관계

  • 제3정규형(3NF)에서는 이행적 종속을 제거하는 것이 목표

예시:

직원 정보 테이블

직원 ID (A)
부서 ID (B)
부서장 이름 (C)

1001

D01

김부장

1002

D02

이부장

1003

D01

김부장

  • 직원 ID가 부서 ID를 결정할 수 있습니다. 즉, A → B.

  • 부서 ID가 부서장 이름을 결정할 수 있습니다. 즉, B → C.

  • 결과적으로 직원 ID는 부서장 이름을 간접적으로 결정할 수 있습니다. 즉, A → C.

    • 이는 이행적 함수적 종속의 예입니다. 직원 ID는 부서 ID를 통해 부서장 이름을 간접적으로 결정하고 있습니다.

요약:

  • 이행적 함수적 종속은 간접적인 종속 관계를 의미합니다.

  • A → B, B → C일 때, A → C도 성립합니다.

정규화가 뭔가요?

  • 설계 과정에서 데이터 중복을 줄이고, 이상 현상(삽입, 갱신, 삭제 이상)을 방지하기 위해 테이블을 최적화하는 과정

1. 제1정규형(1NF):

  • 테이블의 모든 속성이 원자값(더 이상 나눌 수 없는 값)으로 이루어져 있어야 합니다. 즉, 중첩된 데이터나 중복된 값이 없도록 데이터를 정리하는 단계입니다.

2. 제2정규형(2NF):

  • 제1정규형을 만족하고, 기본키에 대해 완전 함수적 종속을 만족해야 합니다. 즉, 기본키의 일부에만 종속되는 속성(부분 함수적 종속)을 제거합니다.

3. 제3정규형(3NF):

  • 제2정규형을 만족하고, 이행적 함수적 종속을 제거합니다. 즉, 기본키가 아닌 속성들 간의 간접적인 종속 관계를 없애는 단계입니다.

4. BCNF(Boyce-Codd Normal Form):

  • 제3정규형을 강화한 형태로, 테이블의 모든 결정자가 반드시 후보키여야 한다는 규칙을 따릅니다. 복잡한 종속성을 제거하여 더 높은 무결성을 확보합니다.

원부이결다조

제 1 정규화(1NF) : 모든 컬럼 값이 원자값(Atomic value)을 가지도록 테이블을 구조화합니다. 제 2 정규화(2NF) : 테이블에 존재하는 모든 컬럼이 기본 키에 대해 완전 함수적 종속 관계를 가지도록 테이블을 분리합니다.(부분 함수 종속 제거) 제 3 정규화(3NF) : 모든 비기본키 컬럼이 기본 키에 대해 이행적 함수 종속 관계를 가지지 않도록 테이블을 분리합니다. 보이스-코드 정규화(BCNF) : 모든 결정자가 후보키가 되도록 테이블을 분리합니다. 제 4 정규화(4NF) : 다중값 종속 관계가 있는 컬럼을 분리합니다. 제 5 정규화(5NF) : 조인을 통해 유도 가능한 데이터를 분리합니다.

반정규화가 뭔가요?

  • 정규화된 데이터베이스에서 성능 향상을 위해 일부 정규화를 되돌리는 과정

  • 정규화로 인해 쪼개진 테이블들을 다시 결합하거나, 중복 데이터를 일부 허용하여 쿼리 성능을 최적화하는 방법

  • JOIN 연산이 많아져 성능이 저하

PreviousWeek3 IndexNextWeek5 DB Transaction, Recovery

Last updated 8 months ago