728x90

Computer Science/πŸ’Ύ Database

    [DB] μ •κ·œν™”(Normalization)와 λ°˜μ •κ·œν™”(De-Normalization)

    μ •κ·œν™”(Normalization) λ¦΄λ ˆμ΄μ…˜μ„ μ—¬λŸ¬ 개둜 λΆ„λ¦¬ν•˜λŠ” κ³Όμ • λ¦΄λ ˆμ΄μ…˜ κ°„ 잘λͺ»λœ ν•¨μˆ˜ 쒅속 κ΄€κ³„λ‘œ λ°œμƒν•˜λŠ” 각쒅 μ‚½μž…/κ°±μ‹ /μ‚­μ œ 이상 ν˜„μƒμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•¨ λΆˆν•„μš”ν•œ 데이터 제거λ₯Ό 톡해 μ €μž₯ 곡간을 효율적으둜 μ‚¬μš© ν•¨μˆ˜ 쒅속 κ΄€κ³„λŠ” λ¦΄λ ˆμ΄μ…˜ 뢄리(μ •κ·œν™”)의 기쀀이 됨 β€» μ‚½μž…/κ°±μ‹ /μ‚­μ œ 이상 ν˜„μƒμ— κ΄€ν•œ λ‚΄μš©μ€ μ•„λž˜ 포슀트 μ°Έκ³  https://zu-techlog.tistory.com/141 [DB] 이상 ν˜„μƒ(Anomaly) κ°œλ…, μ’…λ₯˜ 이상 ν˜„μƒ(Anomaly) 쀑볡이 λ°œμƒν•˜κ³  전체적인 무결성이 μ €ν•˜ λ¦΄λ ˆμ΄μ…˜μ— λŒ€ν•œ 데이터 μ‚½μž…, μˆ˜μ •, μ‚­μ œ 연산을 ν•  λ•Œ λ°œμƒν•  수 μžˆλŠ” λΆ€μž‘μš© ν˜„μ‹€μ„Έκ³„μ˜ μ‹€μ œ κ°’κ³Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 값이 일 zu-techlog.tistory.com 제 1μ •κ·œν™”(1NF) 릴..

    [DB] 이상 ν˜„μƒ(Anomaly) κ°œλ…, μ’…λ₯˜

    이상 ν˜„μƒ(Anomaly) 쀑볡이 λ°œμƒν•˜κ³  전체적인 무결성이 μ €ν•˜ λ¦΄λ ˆμ΄μ…˜μ— λŒ€ν•œ 데이터 μ‚½μž…, μˆ˜μ •, μ‚­μ œ 연산을 ν•  λ•Œ λ°œμƒν•  수 μžˆλŠ” λΆ€μž‘μš© ν˜„μ‹€μ„Έκ³„μ˜ μ‹€μ œ κ°’κ³Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 값이 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒ μ •κ·œν™”λ₯Ό 톡해 ν•΄κ²° κΈ°λ³Έ ν…Œμ΄λΈ” μ˜ˆμ‹œ) 학ꡐ ν…Œμ΄λΈ” 1. μ‚½μž… 이상(Insertion Anomaly) νŠΉμ • 데이터가 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ μ€‘μš”ν•œ 데이터λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ‚½μž…ν•  수 없을 λ•Œ λ°œμƒ λ‚΄κ°€ μ›ν•˜λŠ” κ°’λ§Œ ν…Œμ΄λΈ”μ— μ‚½μž…ν•˜κ³  싢은데, ν…Œμ΄λΈ”μ— ν•„μš”ν•˜μ§€ μ•Šμ€ ν•„λ“œλ“€ λ•Œλ¬Έμ— μ›μΉ˜ μ•ŠλŠ” ν•„λ“œμ˜ 값도 μ‚½μž…ν•΄μ•Ό ν•˜λŠ” 경우 μ‹ μ„€λœ 'μˆ˜ν•™κ³Ό'μ—λŠ” 학생이 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ ν…Œμ΄λΈ”μ— 'μˆ˜ν•™κ³Ό' 데이터λ₯Ό μΆ”κ°€ν•  수 μ—†μŒ μ •κ·œν™”λ₯Ό 톡해 학생 ν…Œμ΄λΈ”κ³Ό ν•™κ³Ό ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜λ©΄ ν•΄κ²° κ°€λŠ₯ 2. μ‚­μ œ 이상((Deleti..

    [DB] SQL 쑰인(Join) κ°œλ…, μ’…λ₯˜

    쑰인(Join) ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ˜ μ—¬λŸ¬ ν…Œμ΄λΈ”μ˜ λ ˆμ½”λ“œλ₯Ό μ‘°ν•©ν•˜μ—¬ ν•˜λ‚˜μ˜ μ—΄λ‘œ ν‘œν˜„ν•œ 것\ λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” μ„œλ‘œ κ΄€κ³„μžˆλŠ” 데이터가 μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œ λ‚˜λ‰˜μ–΄ μ €μž₯λ˜μžˆμ–΄ 쑰인을 톡해 각 ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜μ—¬ 효과적으둜 검색 두 ν…Œμ΄λΈ”μ˜ 쑰인을 μœ„ν•΄μ„œλŠ”κΈ°λ³Έν‚€(PRIMARY KEY, PK)와 μ™Έλž˜ν‚€(FOREIGN KEY, FK) κ΄€κ³„λ‘œ λ§Ίμ–΄μ Έμ•Ό 함 쑰인의 μ’…λ₯˜ λ‚΄λΆ€ 쑰인(INNER JOIN): 두 ν…Œμ΄λΈ”μ„ 쑰인할 λ•Œ, 두 ν…Œμ΄λΈ”μ— λͺ¨λ‘ μ§€μ •ν•œ μ—΄μ˜ 데이터가 μžˆμ–΄μ•Ό 함 μ™ΈλΆ€ 쑰인(OUTER JOIN): 두 ν…Œμ΄λΈ”μ„ 쑰인할 λ•Œ, 1개의 ν…Œμ΄λΈ”μ—λ§Œ 데이터가 μžˆμ–΄λ„ κ²°κ³Όκ°€ λ‚˜μ˜΄ μƒν˜Έ 쑰인(CROSS JOIN): ν•œμͺ½ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  ν–‰κ³Ό λ‹€λ₯Έ μͺ½ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  행을 μ‘°μΈν•˜λŠ” κΈ°λŠ₯ 자체 쑰인(SELF JOIN): μžμ‹ μ΄ 자..

    [DB] λ°μ΄ν„°λ² μ΄μŠ€ 기초 μš©μ–΄, ν‚€(Key)의 κ°œλ…κ³Ό μ’…λ₯˜

    λ°μ΄ν„°λ² μ΄μŠ€ 기초 μš©μ–΄ λ¦΄λ ˆμ΄μ…˜(Relation) κ΄€κ³„ν˜• 데이터 λͺ¨λΈμ—μ„œ ν•˜λ‚˜μ˜ κ°œμ²΄μ— κ΄€ν•œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ ꡬ쑰 (= ν…Œμ΄λΈ”) μŠ€ν‚€λ§ˆμ™€ μΈμŠ€ν„΄μŠ€λ‘œ 이루어짐 μŠ€ν‚€λ§ˆ(Schema) λ¦΄λ ˆμ΄μ…˜μ˜ 이름, 각 μ†μ„±μ˜ 이름, νƒ€μž…, 도메인 등을 μ •μ˜ν•˜λŠ” κ°œλ… μΈμŠ€ν„΄μŠ€(Instance) λ¦΄λ ˆμ΄μ…˜μ— μ €μž₯λ˜λŠ” 데이터(νŠœν”Œ)의 집합 속성(Attribute) λ¦΄λ ˆμ΄μ…˜μ˜ μ—΄(Column) μ„œλ‘œ λ‹€λ₯Έ 이름을 κ°€μ Έμ•Ό 함 νŠœν”Œ(Tuple) / λ ˆμ½”λ“œ(Record) λ¦΄λ ˆμ΄μ…˜μ˜ ν–‰(Row) 쀑볡 λΆˆκ°€ 차수(Degree) ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ—μ„œ μ†μ„±μ˜ 전체 개수 카디널리티(Cardinality) ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ—μ„œ νŠœν”Œμ˜ 전체 개수 도메인(Domain) λ¦΄λ ˆμ΄μ…˜μ˜ 속성이 κ°€μ§ˆ 수 μžˆλŠ” μ›μžκ°’λ“€μ˜ 집합 ν‚€(Key) λ¦΄λ ˆμ΄μ…˜μ˜ νŠœν”Œμ„ ..

    [DB] νŠΈλžœμž­μ…˜(Transaction) κ°œλ…, νŠΉμ§•, μ—°μ‚°, μƒνƒœ

    νŠΈλžœμž­μ…˜(Transaction) λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ ν•œκΊΌλ²ˆμ— μˆ˜ν–‰λ˜μ–΄μ•Όν•  일련의 μ—°μ‚° λ°μ΄ν„°λ² μ΄μŠ€ 일관성과 무경성 보μž₯ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν•˜λ‚˜μ˜ μž‘μ—…μ΄ μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ λ‹€λ₯Έ μž‘μ—…μ΄ κ°„μ„­ν•˜μ§€ λͺ»ν•˜λ„둝 함 논리적인 μž‘μ—… 셋을 λͺ¨λ‘ μ™„λ²½ν•˜κ²Œ μ²˜λ¦¬ν•˜κ±°λ‚˜ λ˜λŠ” μ²˜λ¦¬ν•˜μ§€ λͺ»ν•  κ²½μš°μ—λŠ” 원 μƒνƒœλ‘œ λ³΅κ΅¬ν•΄μ„œ μž‘μ—…μ˜ μΌλΆ€λ§Œ μ μš©λ˜λŠ” ν˜„μƒμ΄ λ°œμƒν•˜μ§€ μ•Šκ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” κΈ°λŠ₯ νŠΈλžœμž­μ…˜ μ—°μ‚° Commit ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ λλ‚˜μ„œ λ°μ΄ν„°λ² μ΄μŠ€κ°€ 일관성 μžˆλŠ” μƒνƒœμ— μžˆμŒμ„ μ•Œλ €μ£ΌκΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ—°μ‚° Rollback ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 κΉ¨λœ¨λ Έμ„ λ•Œ, 이 νŠΈλžœμž­μ…˜μ˜ 일뢀가 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ”λΌλ„ νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ„ 보μž₯..

    [DB] RDBMS의 SQL과 NoSQL 차이

    κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(RDBMS, SQL Database) κ³ μ •λœ ν–‰(row)κ³Ό μ—΄(column)둜 κ΅¬μ„±λœ ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ €μž₯ ν…Œμ΄λΈ”μ˜ 관계가 κ΅¬μ‘°ν™”λœ λ°μ΄ν„°μ˜ λͺ¨μŒμ΄κΈ° λ•Œλ¬Έμ— κ΅¬μ‘°ν™”λœ 쿼리 μ–Έμ–΄(SQL)λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό λ‹€λ£Έ 각 열은 ν•˜λ‚˜μ˜ 속성에 λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•˜κ³ , ν–‰μ—λŠ” 각 μ—΄μ˜ 데이터 ν˜•μ‹μ— λ§žλŠ” 데이터가 μ €μž₯ ν…Œμ΄λΈ”μ˜ ꡬ쑰와 데이터 νƒ€μž… 등을 사전에 μ •μ˜ν•œ ν›„ κ·Έ ν˜•μ‹μ„ μœ μ§€ν•˜λ©° 데이터 μ‘°μž‘ ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 있음 μž₯점 λͺ…ν™•ν•˜κ²Œ μ •μ˜λœ μŠ€ν‚€λ§ˆ, 데이터 무결성 보μž₯ κ΄€κ³„λŠ” 각 데이터λ₯Ό 쀑볡없이 ν•œλ²ˆλ§Œ μ €μž₯ 단점 데이터 μŠ€ν‚€λ§ˆλ₯Ό λ³€κ²½ν•˜κΈ° μ–΄λ €μ›Œ μœ μ—°μ„±μ΄ 떨어짐 관계λ₯Ό λ§Ίκ³  μžˆμ–΄μ„œ Join 문이 λ§Žμ€ λ³΅μž‘ν•œ 쿼리가 λ§Œλ“€μ–΄μ§ˆ 수 있음 λŒ€μ²΄λ‘œ 수직적 ν™•μž₯만 κ°€λŠ₯함 λΉ„κ΄€κ³„ν˜•..

    [DB] 인덱슀(Index) κ°œλ…, μž₯단점, μ „λž΅, ꡬ쑰

    인덱슀(Index) μ±…μ˜ '색인'κ³Ό 같이 λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄ 데이터 검색 μ„±λŠ₯을 높이기 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 자료 ꡬ쑰 νŠΉμ • μΉΌλŸΌμ— 인덱슀λ₯Ό μƒμ„±ν•˜λ©΄, ν•΄λ‹Ή 칼럼의 데이터λ₯Ό μ •λ ¬ν•˜μ—¬ λ³„λ„μ˜ λ©”λͺ¨λ¦¬ 곡간에 λ°μ΄ν„°μ˜ 물리적 μ£Όμ†Œμ™€ ν•¨κ»˜ μ €μž₯ 데이터λ₯Ό κ²€μƒ‰ν•˜λŠ” 쿼리λ₯Ό μ‹€ν–‰ν•˜λ©΄ μ˜΅ν‹°λ§ˆμ΄μ €λŠ” μΈλ±μŠ€μ— μ €μž₯λ˜μ–΄ μžˆλŠ” λ°μ΄ν„°μ˜ 물리 μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜λ©΄μ„œ 검색 속도 ν–₯상 인덱슀 생성 μ‹œ 데이터λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ μž₯점 검색 쑰건 WHERE μ ˆμ—μ„œμ˜ νš¨μœ¨μ„± 인덱슀λ₯Ό μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ λ’€μ£½λ°•μ£½ μ„žμ—¬μžˆλŠ” 데이터 쀑 검색을 ν•˜λ €λ©΄ ν’€ μŠ€μΊ”(Full Scan)을 해야함 인덱슀 ν…Œμ΄λΈ”μ€ 데이터듀이 μ •λ ¬λ˜μ–΄ μ €μž₯λ˜μ–΄ 있기 λ•Œλ¬Έμ— 쑰건(WHERE절)에 λ§žλŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ 찾을 수 있음 μ •λ ¬ ORDER BY μ ˆμ—μ„œμ˜ νš¨μœ¨μ„± 인덱슀λ₯Ό μ‚¬μš©ν•˜λ©΄ 이미 ..

    [DB] SQL SELECT 쿼리 문법 μˆœμ„œμ™€ μ‹€ν–‰ μˆœμ„œ

    SQL의 SELECT 쿼리문이 μ–΄λ–€ μˆœμ„œλ‘œ 싀행이 λ˜λŠ”μ§€λ₯Ό μ•Œλ©΄ μ˜¬λ°”λ₯΄κ³  효율적인 쿼리λ₯Ό μ§œλŠ”λ°μ— λ§Žμ€ 도움이 λœλ‹€. λ”°λΌμ„œ SQL 문법 μˆœμ„œμ™€ μ‹€μ œ μ‹€ν–‰ μˆœμ„œλ₯Ό λ‹€μŒκ³Ό 같이 정리해 λ³Έλ‹€. πŸ’Ž SQL 문법 μˆœμ„œ SELECT FROM WHERE GROUP BY HAVING ORDER BY πŸ’Ž SQL μ‹€μ œ μ‹€ν–‰ μˆœμ„œ FROM : 각 ν…Œμ΄λΈ” 확인 ON : 쑰인 쑰건 확인 JOIN : ν…Œμ΄λΈ” 쑰인 (병합) WHERE : 데이터 μΆ”μΆœ 쑰건 확인 GROUP BY : νŠΉμ • 칼럼으둜 데이터 κ·Έλ£Ήν™” HAVING : κ·Έλ£Ήν™” 이후 데이터 μΆ”μΆœ 쑰건 확인 SELECT : 데이터 μΆ”μΆœ DISTINCT : 쀑볡 제거 ORDER BY : 데이터 μ •λ ¬

728x90