πŸ“š μ •κ·œν™”μ™€ 쑰인

yoondguΒ·2022λ…„ 5μ›” 3일
0

Oracle

λͺ©λ‘ 보기
5/9

κ°•μ˜ μˆ˜κ°• 쀑 μž‘μ„±ν•œ λ…ΈνŠΈμ—μ„œ λ‚΄μš©μ„ 발췌, μ΄μ‘μˆ˜ κ°•μ‚¬λ‹˜ κ°•μ˜ 의 λ…ΈνŠΈμ™€ 이미지λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ •κ·œν™”(Normalization)


πŸ“Œ μ •κ·œν™”

  • λ°μ΄ν„°μ˜ 쀑볡을 μ œκ±°ν•˜κΈ° μœ„ν•΄μ„œ, μ—¬λŸ¬ ν…Œμ΄λΈ”μ— 정보λ₯Ό λ‚˜λˆ„μ–΄ μ €μž₯ν•˜λŠ” 방식
  • μ •κ·œν™”λŠ” 논리적 데이터 λͺ¨λΈμ„ μΌκ΄€μ„±μžˆκ³ , 쀑볡을 μ œκ±°ν•˜μ—¬ 보닀 μ•ˆμ •μ„±μ„ κ°–λŠ” λ°”λžŒμ§ν•œ 자료ꡬ쑰둜 λ§Œλ“€κΈ° μœ„ν•΄ κ±°μΉ˜λŠ” 단계닀.

πŸ’‘ μ •κ·œν™”μ˜ 단계

  • μ •κ·œν™”μ˜ λ‹¨κ³„λŠ” 제1μ •κ·œν˜•μ—μ„œλΆ€ν„° 제5μ •κ·œν˜•κ³Ό BCNF(Boyce-Codd Normal Form)κΉŒμ§€ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
  • 일반적으둜 제3μ •κ·œν˜•μ˜ 단계λ₯Ό 거치게 되면 μ μ ˆν•˜κ³  일관성을 μœ μ§€ν•˜λ©΄μ„œ 쀑볡이 μ—†λŠ” 논리적 데이터 λͺ¨λΈμ„ ꡬ좕할 수 μžˆλ‹€.

πŸ“Œ μ •κ·œν™”μ™€ 쑰인

  • λ°μ΄ν„°μ˜ μ •κ·œν™”
    • 제1μ •κ·œν™”(μ›μžν™”): 속성이 단 ν•˜λ‚˜μ˜ 값을 가지도둝 ν•œλ‹€.
    • 제2μ •κ·œν™”: 기본킀에 λŒ€ν•œ μ™„μ „ ν•¨μˆ˜μ  μ’…μ†μœΌλ‘œ ν…Œμ΄λΈ”μ„ λ‚˜λˆˆλ‹€.

πŸ’‘ 2μ •κ·œν™”μ—μ„œ 기본킀에 μ™„μ „ μ’…μ†λœλ‹€λŠ”κ²ƒμ€ 무슨 뜻?
기본킀에 λŒ€ν•˜μ—¬ 직접 μ—°κ΄€μžˆλŠ” μ†μ„±λΌλ¦¬λ§Œ λΆ„λ₯˜ν•΄μ„œ μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ  λ¬ΆλŠ”λ‹€.
예λ₯Ό λ“€μ–΄ ν•™λ²ˆ(κΈ°λ³Έν‚€), 이름, ν•™κ³Ό / 이름(κΈ°λ³Έν‚€),μˆ˜κ°•κ³Όλͺ© / ν•™κ³Ό(κΈ°λ³Έν‚€), λ‹΄λ‹Ήκ΅μˆ˜λͺ…

  • λ°μ΄ν„°λŠ” 보톡 μ΅œμ†Œ 제2μ •κ·œν™”λ˜μ–΄ 있고, 관계에 따라 μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€.
    μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λΆ„μ‚°λ˜μ–΄ μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ›ν•˜λŠ” 정보λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•˜μ—¬, μ—¬λŸ¬ ν…Œμ΄λΈ”λ“€μ„ μ‘°μΈν•˜κ³  쑰인쑰건을 λͺ…μ‹œν•˜κ²Œ λœλ‹€.
    - 쑰인쑰건의 ν•„μš”μ„±
    - κΈ°λ³Έ 쑰인의 κ²°κ³ΌλŠ” μ–‘μΈ‘μ˜ λͺ¨λ“  행을 κ³±ν•˜λ―€λ‘œ κ·Έ 쀑 μœ νš¨ν•œ μ •λ³΄μ˜ ν–‰λ“€λ§Œ λ½‘μ•„μ€˜μ•Ό ν•œλ‹€.
    - μ„œλ‘œ λ‹€λ₯Έ ν…Œμ΄λΈ” 쀑 μ„œλ‘œλ₯Ό μ—°κ²°μ‹œμΌœμ£ΌλŠ” 속성값을 톡해 쑰인쑰건을 κ±Έκ³ , μœ νš¨ν•œ μ •λ³΄λ§Œμ„ μ‘°νšŒν•  수 μžˆλ‹€.
    ex departments.department_id = employees.department_id;

πŸ’‘ μ–΄λŠ ν…Œμ΄λΈ”μ— μ–΄λ–€ 값이 μžˆλŠ”μ§€ 잘 μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€. 거의 λͺ¨λ“  λ°μ΄ν„°λŠ” μ •κ·œν™”λ˜μ–΄μžˆλ‹€.


쑰인(Join)


  • 쑰인은 두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ μ—°κ²°μ§€μ–΄μ„œ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” 것이닀.
    • 였라클과 같은 κ΄€κ³„ν˜•λ°μ΄ν„°λ² μ΄μŠ€λŠ” λͺ¨λ“  정보λ₯Ό ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ— μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 데이터가 μ •κ·œν™”λ˜μ–΄ μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λΆ„μ‚°λ˜μ–΄ μžˆλ‹€.
    • 데이터가 μ—¬λŸ¬ ν…Œμ΄λΈ”μ— 흩어져 있기 λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎκΈ°μœ„ν•΄μ„œλŠ” μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ λ‹€ μ‘°νšŒν•΄μ•Ό ν•œλ‹€.
  • 쑰인은 μ—¬λŸ¬ ν…Œμ΄λΈ”μ— 흩어져 μžˆλŠ” μ •λ³΄μ€‘μ—μ„œ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μ •λ³΄λ§Œ κ°€μ Έμ™€μ„œ κ°€μƒμ˜ ν…Œμ΄λΈ”μ²˜λŸΌ λ§Œλ“€μ–΄μ„œ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” 것이닀.

πŸ“Œ 쑰인의 방법

  • 쑰인문법은 μ˜€λΌν΄μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” Oracle Joinκ³Ό λͺ¨λ“  RDBMSμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” ANSI(ν‘œμ€€) Join이 μžˆλ‹€.
    • Oracle Join

        SELECT a.col1, b.col2
        FROM table1 a, table2 b
        WHERE a.col2 = b.col2; -- Join 쑰건
    • ANSI Join

        SELECT a.col1, b.col2
        FROM table1 a [INNER] JOIN table2 b
        ON a.col2 = b.col2
  • 쑰인이 μˆ˜ν–‰λ  λ•ŒλŠ” λ‘κ°œ μ΄μƒμ˜ ν…Œμ΄λΈ”μ΄ μ‚¬μš©λ˜λŠ”λ°, λ‘˜ 쀑에 λ¨Όμ € μ½λŠ” ν…Œμ΄λΈ”μ„ μ„ ν–‰ ν…Œμ΄λΈ”μ΄λΌ ν•˜κ³ , 뒀에 μ˜€λŠ” ν…Œμ΄λΈ”μ„ ν›„ν–‰ ν…Œμ΄λΈ”μ΄λΌκ³ ν•œλ‹€.
  • μ„ ν–‰ ν…Œμ΄λΈ”μ€ μ‘°νšŒν•  데이터가 적은 ν…Œμ΄λΈ”λ‘œ μ„ νƒν•˜λŠ” 것이 μ†λ„λ©΄μ—μ„œ μœ λ¦¬ν•˜λ‹€.

πŸ“Œ 쑰인 μ˜ˆμ‹œ

  • μ‚¬μ›ν…Œμ΄λΈ”μ—λŠ” μ‚¬λ²ˆ, 이름, μ†Œμ†λΆ€μ„œλ²ˆν˜Έκ°€ μžˆλ‹€.
  • λΆ€μ„œν…Œμ΄λΈ”μ—λŠ” λΆ€μ„œλ²ˆν˜Έ, λΆ€μ„œλͺ…, μœ„μΉ˜κ°€ μžˆλ‹€.
  • μ•„λž˜μ™€ 같이 μ‚¬μ›ν…Œμ΄λΈ”μ—μ„œ μ‚¬μ›μ˜ 이름을 κ°€μ Έμ˜€κ³ , λΆ€μ„œν…Œμ΄λΈ”μ—μ„œ κ·Έ 사원이 μ†Œμ†λœ λΆ€μ„œλͺ…을 μ‘°νšŒν•΄μ•Ό ν•œλ‹€.

  • 쑰인은 μ‚¬μ›ν…Œμ΄λΈ”κ³Ό λΆ€μ„œν…Œμ΄λΈ”μ˜ 각각의 행을 μ„œλ‘œ μ—°κ΄€μžˆλŠ” 행끼리 μ—°κ²°μ§€μ–΄μ„œ μƒˆλ‘œμš΄ κ°€μƒμ˜ ν…Œμ΄λΈ”μ„ λ§Œλ“€κ³ , κ·Έ ν…Œμ΄λΈ”λ‘œλΆ€ν„° ν•„μš”ν•œ 정보λ₯Ό κ°€μ Έμ˜€λŠ” 것이닀.

0개의 λŒ“κΈ€