Session 19. DataBase

minj9_6Β·2021λ…„ 9μ›” 15일

TIL, WeCode, CourseΒ 

λͺ©λ‘ 보기

*πŸ”Study Keyword :

βœ…λ°μ΄ν„°λ² μ΄μŠ€κ°€ 무엇이며 πŸ”‘κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ–΄λ–€ νŠΉμ§•μ„ 가지고 μžˆλŠ”μ§€ πŸ”‘mysql에 직접 μ μš©ν•΄λ³΄λ©° μ•Œμ•„λ³΄μž!

1. DataBase

  • DataBaseλž€ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ‹œμŠ€ν…œμœΌλ‘œ 데이터 λ² μ΄μŠ€λŠ” 데이터λ₯Ό μ €μž₯ν•˜κ³  μ—°μ‚°ν•˜κ³  λ³΄μ‘΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • DataBase의 λ°˜λŒ€ κ°œλ…μ€ Memory둜 λ©”λͺ¨λ¦¬λŠ” νœ˜λ°œμ„±μ˜ νŠΉμ§•μ„ κ°€μ Έ 속도가 λΉ λ₯΄λ‹€λŠ” μž₯점을 가진닀.
  • μ΄λŸ¬ν•œ μ„±μ§ˆλ‘œ 인해 μ €μž₯은 데이터 λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό 영ꡬ적으둜 λ³΄μ‘΄ν•˜κ³  λ©”λͺ¨λ¦¬μ—μ„œλŠ” 데이터λ₯Ό 읽어듀여 κ°€κ³΅μ²˜λ¦¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” ν”Œλ‘œμš°κ°€ μΌλ°˜μ μ΄λ‹€.
    => 데이터λ₯Ό μ˜€λžœκΈ°κ°„ μ €μž₯ 및 λ³΄μ‘΄ν•˜κ³  μ²΄κ³„μ μœΌλ‘œ λ³΄μ‘΄ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.

1_1. μ›Ήμ‹œμŠ€ν…œ μƒμ˜ λ°μ΄ν„°λ² μ΄μŠ€

  • μ‹€μ§ˆμ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œ DBMS, 데이터 베이슀 관리 μ‹œμŠ€ν…œ, 데이터 베이슀λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ‘΄μž¬ν•œλ‹€.
  • μ €μž₯μž₯치 λ‚΄ μ €μž₯된 λ°μ΄ν„°μ˜ 집합인 λ°μ΄ν„°λ² μ΄μŠ€μ™€λŠ” λ‹€λ₯Έ κ°œλ…μ΄λ‹€.

  • λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œμ˜ μ‚¬μš© λͺ©μ μ€ 생산성 ν–₯상과 κΈ°λŠ₯μ„± μ‹ λ’°μ„± 확보에 μžˆλ‹€.
    1> CRUD 생산성이 λ›°μ–΄λ‚˜λ‹€. 생성 μΆ”κ°€ μ‚­μ œ 갱신이 νŽΈλ¦¬ν•˜λ‹€
    2> λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  λ•Œ 효율적으둜 잘 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œ κ³ κΈ‰κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
    3> 볡수의 μœ μ € λŒ€μ‘, λΉ λ₯΄κ²Œ 검색, κΈ°λŠ₯ ν™•μž₯의 μœ μ—°ν•¨
    4> 신뒰성도 보μž₯ 받을 수 μžˆλ‹€.

2. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν‘œ, ν…Œμ΄λΈ”μ΄λ‹€.
  • λͺ¨λ“  λ°μ΄ν„°λŠ” ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ μ§€κ³  μ»¬λŸΌμ€ ν–‰, λ‘œμš°λŠ” 각 ν•­λͺ©μ˜ κ°’μœΌλ‘œ μ—΄κ³Ό κ°™λ‹€.
  • 즉, κ΄€κ³„ν˜• 데이터 λ² μ΄μŠ€λž€ν–‰κ³Ό 열을 가진 ν‘œν˜„μ‹μ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ” ν˜•νƒœμ˜ 데이터 λ² μ΄μŠ€μ΄λ‹€.

2_1. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ νŠΉμ§•

  • 각 λ‘œμš°λŠ” 고유의 id 값이 μžˆλŠ”λ° λ¦¬μ•‘νŠΈλ‘œ 따지면 ν‚€ 값에 ν•΄λ‹Ήλœλ‹€.
  • ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ€ λ‘œλ£¨μ— λ°˜λ“œμ‹œ κ³ μœ ν‚€(Primary key)λ₯Ό 가지고 μžˆλŠ”λ° 데이터가 λ°”λ€Œλ”λΌλ„ λ‹€λ₯Έ ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터에 영ν–₯을 주지 μ•Šκ²Œ ν•˜κΈ° μœ„ν•΄μ„œ κ³ μœ ν‚€λ₯Ό μ΄μš©ν•˜μ—¬ μ°Έμ‘° ν•  μˆ˜κ°€ μžˆλ‹€.
  • κ΄€κ³„ν˜• λ°μ΄ν„°μ˜ νŠΉμ„±μƒ ν…Œμ΄λΈ”μ΄ μ„œλ‘œ μƒν˜Έκ΄€λ ¨μ„±μ„ 가지고 μžˆλ‹€

2_2. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ°„μ˜ 관계 μ’…λ₯˜

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ’…λ₯˜ SQLκ³Ό NO-SQL둜 λ‚˜λˆ μ§„λ‹€.
  • ν…Œμ΄λΈ”λΌλ¦¬ μ—°κ²°λ˜λŠ” κ²½μš°λŠ” 크게 3κ°€μ§€λ‘œ λ‚˜λˆ μ§„λ‹€.

1. One to one 관계

  • users ν…Œμ΄λΈ”μ—” name이 있고 identification numbers ν…Œμ΄λΈ”μ—λŠ” identification numbers ν…Œμ΄λΈ”μ˜ 고유 ν‚€, users ν…Œμ΄λΈ”μ˜ 고유 ν‚€ 값이 user_id둜 μ„œλ‘œ 1λŒ€ 1둜 λ§€μΉ­λ˜μ–΄.

  • Ex> μš°λ¦¬λ‚˜λΌμ—μ„œ μ£Όλ―Όλ²ˆν˜ΈλŠ” μ„œλ‘œ κ³ μœ ν•˜κΈ°μ— 1λŒ€1 관계라고할 수 μžˆλ‹€,

  • 고유 λ„˜λ²„λ“€ ν…Œμ΄λΈ”μ˜ μœ μ € 아이디 μ»¬λŸΌμ€ μœ μ € ν…Œμ΄λΈ”μ˜ 아이디λ₯Ό μ°Έμ‘°ν•œλ‹€
  • FkλŠ” λ°˜λ“œμ‹œ users Pk에 μ‘΄μž¬ν•˜λŠ” ν‚€λ₯Ό μ°Έμ‘°ν•΄μ•Όν•œλ‹€.

2. One to many

  • users ν…Œμ΄λΈ”μ— μžˆλŠ” Pk킀에 μƒμ‘ν•˜λŠ” 데이터가 pet ν…Œμ΄λΈ”μ— user_id둜 λ‹€μˆ˜μ°Έμ‘°λ˜λŠ” ν˜•νƒœλ₯Ό 가진닀.
  • ν•˜λ‚˜μ˜ 데이터가 μ—¬λŸ¬κ°œμ˜ Fk둜 듀어갔을 λ•Œ ν•˜λ‚˜μ˜ Pkκ°€ μ—¬λŸ¬ 개의 rowλ₯Ό μ°Έμ‘°κ°€λŠ₯ν•œλ‹€.
  • 펫 ν…Œμ΄λΈ”μ˜ μœ μ € 아이디 μΉΌλŸΌμ€ μœ μ € ν…Œμ΄λΈ”μ˜ pk λ₯Ό μ°Έμ‘°ν•œλ‹€.
  • μΌλŒ€ λ‹€λŠ” ν•˜λ‚˜μ˜ 정보λ₯Ό μ—¬λŸ¬ 개의 데이터가 κ°€μ§„λ‹€λŠ” 것이 νŠΉμ§•μ΄λ‹€
  • EX1> 고객이 μ—¬λŸ¬κ°œμ˜ 주문을 ν•  수 μžˆλ“― 주문은 μ—¬λŸ¬κ°œν•˜μ§€λ§Œ ν•΄λ‹Ή 주문을 ν•œ 건 ν•œλͺ…μ˜ 고객이닀.
  • EX2> ν•˜λ‚˜μ˜ μΉ΄ν…Œκ³ λ¦¬μ— ν•΄λ‹Ήν•˜λŠ” μ—¬λŸ¬ μ œν’ˆμ΄ λ“€μ–΄κ°€ μžˆλŠ” 경우

  • 1:1은 μ„œλ‘œκ°€ μ„œλ‘œμ˜ ν•œκ°€μ§€ λ‘œμš°μ—λ§Œ μ—°κ²°
  • 1:N은 ν•œ ν…Œμ΄λΈ”μ˜ λ‘œμš°μ— λ‹€λ₯Έ ν…Œμ΄λΈ” 둜우 μ—¬λŸ¬κ°œκ°€ μ—°κ²°

3. many to many

  • λ‹€λŒ€ λ‹€ κ΄€κ³„λ‘œ μ €μž μ»¬λŸΌμ— μ—¬λŸ¬λͺ…μ˜ μž‘κ°€λ₯Ό 넣을 수 μžˆλŠ”λ° 이λ₯Ό λ‚˜λˆ μ„œ 풀어놓은 뒀에 ν…Œμ΄λΈ”μ„ μ €μž₯ν•  수 μžˆλ‹€.

  • μ €μž μ»¬λŸΌμ— μ—¬λŸ¬λͺ…μ˜ μž‘κ°€λ₯Ό 넣을 수 μžˆλŠ”λ° 이λ₯Ό λ‚˜λˆ μ„œ 풀어놓은 뒀에 ν…Œμ΄λΈ”μ„ μ €μž₯ν•  수 도 μžˆλ‹€.

    -μ €μž ν…Œμ΄λΈ” μ±… ν…Œμ΄λΈ”μ€ κ³ μœ ν•œλ° 각각 κ³ μœ ν•œ pk λ₯Ό 가지고 μžˆλ‹€. 쀑간 ν…Œμ΄λΈ”μΈ 어더 뢁 ν…Œμ΄λΈ”μ€ 어더아이디 뢁아아디 각각의 fkλ₯Ό 가지고 μžˆλ‹€.
  • λ‹€λŒ€λ‹€ 관계에선 각각 λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œλŠ” 쀑간 ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•˜λŠ”λ° 데이터 μ‘°ν•©μ‹œ 이 쀑간 ν…Œμ΄λΈ”μ„ ν™œμš©ν•œλ‹€.

  • μ •κ·œν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„€κ³„μ›μΉ™μœΌλ‘œμ„œ λͺ¨λ“  ν…Œμ΄λΈ”μ€ μ •κ·œν™”λ₯Ό λ°˜λ“œμ‹œ κ±°μ³μ•Όν•œλ‹€.
  • ν•˜λ‚˜μ˜ 책이 μ—¬λŸ¬μ‚¬λžŒμ˜ μ €μžλ‘œλΆ€ν„° μ§‘ν•„λ˜μ–΄ μ—¬λŸ¬λͺ…μ˜ μ €μžκ°€ μ‘΄μž¬ν•˜λŠ” 경우
  • μ±…μ˜ 정보λ₯Ό 가진 λΆν…Œμ΄λΈ” μ €μžμ˜ 정보λ₯Ό 가진 μ–΄λ”μŠ€ ν…Œμ΄λΈ”μ΄ 각각 μ°Έμ‘°λ˜μ–΄ 쀑간 정보인 μ–΄λ”μŠ€ 뢁 ν…Œμ΄λΈ”μ— μ €μž₯λœλ‹€
  • μ±…μ˜ 아이디 μ €μžμ˜ 아이디가 μ—¬λŸ¬κ°œ λ“±λ‘ν•œ 것이 λ°”λ‘œ λ‹€λŒ€λ‹€ 관계이닀.
  • ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜λŠ” μ΄μœ λŠ” ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ— λͺ¨λ“  정보λ₯Ό λ„£κ²Œλ˜λ©΄ λ™μΌν•œ 정보가 λΆˆν•„μš”ν•˜κ²Œ μ€‘λ³΅λ˜λ©°
    잘λͺ»λœ λ””μŠ€ν¬ μ‚¬μš©ν•  μˆ˜λ„ 있고 잘λͺ»λœ 정보가 μ €μž₯될 μœ„ν—˜μ΄ 있기 λ•Œλ¬Έμ— μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ  μ €μž₯ν•˜λŠ”λ° μ΄λŸ¬ν•œ 과정을 μ •κ·œν™”λΌκ³ ν•œλ‹€

2_4. 데이터 베이슀 μž₯치 νŠΈλ Œμž­μ…˜

  • νŠΈλžœμ μ…˜μ΄λž€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 과정을 일련의 κ³Όμ •μœΌλ‘œ λ¬Άμ–΄μ„œ 였λ₯˜κ°€ 생겨 λŒμ•„κ°ˆ λ•Œ μ „λΆ€λ‹€ λ‘€λ°±ν•˜λŠ”κ²Œ μ•„λ‹Œ 쀑간에 μ„Έμ΄λΈŒ 포인트λ₯Ό κ±Έμ–΄μ„œ λŒμ•„κ°ˆ 수 μžˆλ„λ‘ ν•˜λŠ” μž₯치인 좔상적인 κ°œλ…μœΌλ‘œ ACIDλ₯Ό 보μž₯ν•΄μ€€λ‹€.

μ°Έκ³ ) νŠΈλ Œμž­μ…˜μ˜ 4가지 νŠΉμ„±

μ›μžμ„± - νŠΈλžœμž­μ…˜ μž‘μ—… 뢀뢄적 μ‹€ν–‰ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ” 것
일관성 - νŠΉλž™μž­μ…˜ μ™„λ €λ˜λ©΄ γ„ΉμΌλ°˜μ μΈ λ””λΉ„μƒνƒœλ₯Ό μœ μ§€ν•¨
고립성 - νŠΈλž™μž­μ…˜ μˆ˜ν–‰μ‹œ λ‹€λ₯Έ νŠΈλž™μž­μ…˜μ΄ κ°„μ„­ν•˜μ§€ λͺ»ν•˜λŠ” 것
지속성 - μ„±κ³΅ν•œ νŠΈλž™μž­μ…˜μ€ μ˜μ›νžˆ 반영

μ˜ˆμ‹œ) μ–΄λ–€ 10000μ›μ§œλ¦¬ 물건을 κ΅¬λ§€ν•˜λ©΄ 톡μž₯에 1λ§Œμ›μ΄ λ‚¨μ•„μžˆλŠ”μ§€ 확인
1> λ§Œμ›μ΄ 있으면 λ§Œμ›μ„ 차감 κ²°μ œλ²„νŠΌ λˆ„λ₯Ό λ•Œ
2> 물건의 μˆ˜λŸ‰ 1개 차감
3> ꡬ맀자 톡μž₯에 λ§Œμ›μ΄ μ˜¬λΌκ°„λ‹€


  • 데이터 베이슀의 κ°œλ…μ— μ΅μˆ™ν•΄μ§€κ³ 
  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λͺ¨λΈλ§ν•˜λŠ” 것을 많이많이 μ—°μŠ΅ν•˜μž sql을 ν†΅ν•΄μ„œ!

#πŸ“‘Study Source

  • μœ„μ½”λ“œ κ°•μ˜ 쀑 λ²‘μ—”λ“œ 쀑 λŒμ•„μ˜¨ μž₯ν˜„λ‹˜μ˜ λ°˜κ°€μš΄ κ°•μ˜ 쀑:}
자기 μ‹ λ’°μ˜ νž˜μ„ λ―Ώκ³  μ‹€μ²œν•˜λŠ” κ°œλ°œμžκ°€ λ˜κ³ μžν•©λ‹ˆλ‹€.

0개의 λŒ“κΈ€