λ°μ΄ν°λ² μ΄μ€λ λ°μ΄ν°λ₯Ό μ μ₯ λ° λ³΄μ‘΄νλ μμ€ν μ΄λ€. Applicationμμλ λ°μ΄ν°κ° λ©λͺ¨λ¦¬ μμμ μ‘΄μ¬νλ€. λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ°μνκ³ λ³΄μ‘΄νκΈ° μν΄ μ¬μ©νλ€. μ΄μ λ°λλλ κ°λ μλ λ©λͺ¨λ¦¬κ° μλ€. λ©λͺ¨λ¦¬λ νλ°μ±μ΄λ€. ν΄λΉ μ ν리 μΌμ΄μ μ΄ μ’ λ£νλ©΄ λ©λͺ¨λ¦¬μ μλ λ°μ΄ν°λ€μ λ€μ μ½μ΄ λ€μΌμ μλ€. νμ§λ§ μλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μλ€. κ·ΈλΌμΌλ‘ λ°μ΄ν°λ₯Ό μ₯κΈ°κ° μ μ₯ λ° λ³΄μ‘΄νκ³ μ κ·Ό λ° κ΄λ¦¬κ° νΈλ¦¬νκΈ° λλ¬Έμ λ°μ΄ν° λ² μ΄μ€λ₯Ό μ¬μ©νλ κ²μ΄λ€.
μΌλ°μ μΌλ‘ Databaseμλ ν¬κ² κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(RDBMS)μ "NoSQL"λ‘ λͺ μΉλλ λΉκ΄κ³ν(Non-relational) databaseκ° μλ€.
μ΄λ¦ κ·Έλλ‘, κ΄κ³ν λ°μ΄ν° λͺ¨λΈμ κΈ°μ΄λ₯Ό λ λ°μ΄ν° λ² μ΄μ€λ₯Ό λ§νλ€. κ΄κ³ν λ°μ΄ν°λ λ°μ΄ν°λ₯Ό μλ‘ μνΈκ΄λ ¨μ±μ κ°μ§ ννλ‘ ννν λ°μ΄ν°λ₯Ό λ§νλ€.
λͺ¨λ λ°μ΄ν°λ€μ 2μ°¨μ ν μ΄λΈ(Table)λ€λ‘ ννλλ€. κ°κ°μ ν μ΄λΈμ 컬λΌ(column)κ³Ό λ‘μ°(row)λ‘ κ΅¬μ±λλ€.
κ° ν
μ΄λΈλ€μ μλ‘ μνΈ κ΄λ ¨μ±μ κ°μ§κ³ μλ‘ μ°κ²°λ μ μλ€. ν
μ΄λΈ λΌλ¦¬μ μ°κ²°μλ ν¬κ² 3κ°μ§ μ’
λ₯κ° μλ€.
one to one, one to many, many to many
λνμ μΈ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ MySQLκ³Ό PostgreSQL(μ€μ¬μ Postgres)κ° μλ€.
ν
μ΄λΈ Aμ λ‘μ°μ ν
μ΄λΈBμ λ‘μ°κ° μ νν μΌλμΌ λ§€μΉμ΄ λλ κ΄κ²λ₯Ό onetoone κ΄κ³λΌκ³ νλ€.
μμ λμ¨ ν
μ΄λΈμ Userν
μ΄λΈκ³Ό μ μ μ λ³΄κ° λ΄κΈ΄ User_profiles ν
μ΄λΈμ΄ μλ€. μ΄λ° κ΄κ³λ νλͺ
μ μ μλ νλμ νλ‘νμΌ μμ΄λλ§ κ°μ§μ μλ€λ λ»μ΄λ€.
ν
μ΄λΈ Aμ λ‘μ°κ° ν
μ΄λΈ Bμ μ¬λ¬ λ‘μ°μ μ°κ²°μ΄ λλ κ΄κ³λ₯Ό λ§νλ€.
μΌλλ€ λΌκ³ λΆλ₯Έλ€. νλμ μ 보λ₯Ό μ¬λ¬κ°μ λ°μ΄ν°κ° μ°κ²° κ΄κ²λ₯Ό μ§μ μ μλ κ²μ μλ―Ένλλ° ν΄λΉ μμλ κ³ κ°μ΄ μ¬λ¬λ²μ μ£Όλ¬Έμ ν μ μκ³ , ν΄λΉ μ£Όλ¬Έμ μ°κ²°μ ν΄λΉ κ³ κ° νλͺ
μ νμ λλ€. νλμ μ£Όμ²΄κ° μ¬λ¬κ°μ μνκ°μ κ°μ§λ κ²μ μλ―Ένλ€. νλμ μΉ΄ν
κ³ λ¦¬μ κ·Έμ ν΄λΉνλ μ¬λ¬ μ νλ€μ΄ λ€μ΄μλ κ²λ λ§μ°¬κ°μ§ κ΄κ³μ΄λ€.
ν
μ΄λΈ Aμ μ¬λ¬ λ‘μ°κ° ν
μ΄λΈ Bμ μ¬λ¬ λ‘μ°μ μ°κ²°μ΄ λλ κ΄κ²λ₯Ό λ§νλ€.
νλμ μ±
μ μ¬λ¬λͺ
μ μ μκ° μ‘΄μ¬νλ€κ³ νλ©΄ μ±
μ μ 보λ₯Ό κ°μ§κ³ μλ λΆ ν
μ΄λΈκ³Ό μ μμ μ 보λ₯Ό κ°λκ³ μλ authors ν
μ΄λΈμ΄ κ°κ° μ°Έμ‘° λμ΄μ μ€κ° ν
μ΄λΈμΈ authors_books ν
μ΄λΈμ κΈ°λ‘λλ€. authors_booksν
μ΄λΈμ μ€λμ μμ΄λμ μ±
μ μμ΄λλ₯Ό κ°κ° μ°Έμ‘°ν΄ μ¨λ€. μ΄λ κ² μ μ₯λμμ λ νμ¬ κ°μ΄λ° μ€λμ€ λΆ ν
μ΄λΈμλ μ΄λ»κ² μ μ₯λ κΉ. μ±
μ μμ΄λμ μ μμ μμ΄λκ° μ¬λ¬λ² κΈ°λ‘ λ μ μλ€. νλμ μ±
μμ΄λμ μ¬λ €λͺ
μ μ μμ μμ΄λλ₯Ό κΈ°λ‘ν μ μλ€. μ΄λ¬ν κ΄κ³λ₯Ό Many To Many, λ€λλ€ κ΄κ³λΌκ³ νλ€.
Foreign Key(μΈλΆν€)λΌλ κ°λ
μ μ¬μ©νμ μ£Όλ‘ μ°κ²°νλ€. Foreign keyλ κ³ μ κ°μ΄λ€. μμμ λ³Έ one to one μμμ user_profiles ν
μ΄λΈμ user_id 컬λΌμ users ν
μ΄λΈμ κ±Έλ €μλ μΈλΆ ν€λΌκ³ μ§μ νλ€.
μ¦, λ°μ΄ν° λ² μ΄μ€ μκ² user_idμ κ°μ usersν
μ΄λΈμ id κ°μ΄λ©° κ·Έλ¬λ―λ‘ users ν
μ΄λΈμ id 컬λΌμ μ‘΄μ¬νλ κ°λ§ μμ± λ μ μλ€.
λ§μΌ users ν
μ΄λΈμ μλ id κ°μ΄ user_idμ μ§μ λλ©΄ μλ¬κ° λλ€.
μ μ 보λ₯Ό μ¬λ¬ ν μ΄λΈμ λλ μ μ μ₯νλμ§λ₯Ό μκ°ν΄ 보μ. μμμ λ³Έ one to manyμ κ²½μ° κ·Έλ₯ νλμ ν μ΄λΈμ κ³ κ° μ 보μ ꡬμ ν μ ν μ 보 λͺ¨λ μ μ₯νλ©΄ μλ κΉ? νλμ ν μ΄λΈμ λͺ¨λ μ 보λ₯Ό λ€ λ£μΌλ©΄ λμΌν μ 보λ€μ΄ λΆνμνκ² μ€λ³΅λμ΄ μ μ₯λλ€. λ λ§μ λμ€ν¬λ₯Ό μ¬μ©νκ² λκ³ , λν μλͺ»λ λ°μ΄ν°κ° μ μ₯λ κ°λ₯μ±μ΄ λμμ§λ€.
μ¬λ¬ ν
μ΄λΈμ λλ μ μ μ₯ν ν ν
μ΄λΈ λΌλ¦¬ μ°κ²° μν€λ©΄ μμ λ¬Έμ κ° μ¬λΌμ§λ€. μ€λ³΅λ λ°μ΄ν°λ₯Ό μ μ₯νμ§ μμμΌλ‘ λμ€ν¬λ₯Ό λ ν¨μ¨μ μΌλ‘ μ°κ³ , λν μλ‘ κ°μ λ°μ΄ν°μ§λ§ λΆλΆμ μΌλ‘ νλ¦° λ°μ΄ν°κ° μκΈ°λ λ¬Έμ κ° μμ΄μ§λ€. μ΄κ²μ normalization
μ΄λΌκ³ νλ€.
ACIDλ₯Ό μ 곡ν¨μ λ°λΌμ νΈλμμ
(μΌλ ¨μ μμ
λ€μ νλ²μ νλμ unitμΌλ‘ μ€ννλ κ²)κΈ°λ₯μ μ 곡νλ€.
νΈλμμ
μ μΌλ ¨μ μμ
λ€μ΄ λ§μΉ νλμ μμ
μ²λΌ μ·¨κΈλμ΄μ λͺ¨λ λ€ μ±κ³΅νκ±°λ μλλ©΄ λͺ¨λ λ€ μ€ν¨νλκ±Έ μλ―Ένλ€.
commit & rollback
μλ₯Όλ€μ΄, μΉκ΅¬μκ² μΈν°λ· λ± νΉμΌλ‘ λ§μμ μ‘κΈνλ€κ³ ν΄λ³΄μ. λ΄ κ³μ’μ λ§μμ μ°¨κ°νκ³ , μΉκ΅¬μ κ³μ’μ λ§μμ΄ μ¦κ° λμ΄μΌ νλ€. νμ§λ§ μΉκ΅¬ κ³μ’μ λ§μμ΄ μ¦κ°λμ§ μμΌλ©΄ λ§μμ μ¦λ°λλ κ²μ΄λ€. μ΄λ¬ν μν©μ΄ λ°μνμ§ μλλ‘ μ€κ°μ μ€λ₯κ° λ°μνλ€λ©΄ λ€μ μ²μλΆμ² μ€ννκ² νλ κ²μ΄ rollbackμ΄λ€. μ€λ₯ μμ΄ μ μμ μΌλ‘ μ‘κΈμ΄ λμλ€λ©΄ commitνλ€.