Home > DB > πŸ’Ύ[Database] λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λŠ” μ˜λ―ΈλŠ” λ¬΄μ—‡μΌκΉŒ?

πŸ’Ύ[Database] λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λŠ” μ˜λ―ΈλŠ” λ¬΄μ—‡μΌκΉŒ?
Database

πŸ’Ύ[Database] λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λŠ” μ˜λ―ΈλŠ” λ¬΄μ—‡μΌκΉŒ?

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λŠ” 것은, 데이터λ₯Ό μ €μž₯ν•  ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

ν…Œμ΄λΈ”μ€ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ 정보λ₯Ό μ €μž₯ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„λ‘œ, ν–‰(Row) κ³Ό μ—΄(Column) 둜 κ΅¬μ„±λœ ν‘œ(Table) ν˜•νƒœλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

1️⃣ ν…Œμ΄λΈ” μƒμ„±μ˜ 의미.

1. 데이터 ꡬ쑰의 μ •μ˜.

  • ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λŠ” 것은 νŠΉμ • μœ ν˜•μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 데이터 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • 각 μ—΄(Column)은 μ €μž₯될 λ°μ΄ν„°μ˜ 속성을 λ‚˜νƒ€λ‚΄λ©°, 각 ν–‰(Row)은 λ°μ΄ν„°μ˜ κ°œλ³„ ν•­λͺ©(λ ˆμ½”λ“œ) λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, Users ν…Œμ΄λΈ”μ„ λ§Œλ“ λ‹€λ©΄ μ‚¬μš©μžμ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘, 이름, 이메일, λ‚˜μ΄μ™€ 같은 속성을 μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

2. 데이터 νƒ€μž… μ„€μ •.

  • ν…Œμ΄λΈ”μ˜ 각 μ—΄(Column)은 νŠΉμ • 데이터 νƒ€μž…μ„ κ°€μ§‘λ‹ˆλ‹€.
  • 데이터 νƒ€μž…μ€ ν•΄λ‹Ή μ—΄(Column)에 μ–΄λ–€ μ’…λ₯˜μ˜ 데이터가 μ €μž₯될 수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, name μ—΄(Column)은 λ¬Έμžμ—΄ 데이터λ₯Ό μ €μž₯ν•˜κ³  age μ—΄(Column)은 숫자 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ œμ•½ 쑰건 μ„€μ •.

  • ν…Œμ΄λΈ” 생성 μ‹œ, μ œμ•½ 쑰건을 μ„€μ •ν•˜μ—¬ λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, κΈ°λ³Έ ν‚€(Primary Key)λ₯Ό μ„€μ •ν•˜μ—¬ 각 λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜κ±°λ‚˜, νŠΉμ • μ—΄(Column)에 NOT NULL μ œμ•½μ„ κ±Έμ–΄ ν•΄λ‹Ή μ—΄(Column)이 λΉ„μ–΄ μžˆμ„ 수 없도둝 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μ˜ˆμ‹œ: ν…Œμ΄λΈ” 생성.

CREATE TABLE Users (
    id INT KEY,                    -- Primary Key: 각 μ‚¬μš©μžλ₯Ό κ³ μœ ν•˜κ²Œ 식별
    name VARCHAR(100) NOT NULL,    -- 이름: λ¬Έμžμ—΄, null 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
    email VARCHAR(100) UNIQUE,     -- 이메일: κ³ μœ ν•œ λ¬Έμžμ—΄
    age INT,                       -- λ‚˜μ΄: μ •μˆ˜
    created_at TIMESTAMP           -- 생성 μ‹œκ°„: νƒ€μž„μŠ€νƒ¬ν”„
);

μœ„μ˜ SQL μ˜ˆμ‹œλŠ” UsersλΌλŠ” ν…Œμ΄λΈ”μ„ μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
ν…Œμ΄λΈ”μ΄ μ •μ˜λ˜λ©΄ ν•΄λ‹Ή ꡬ쑰에 맞게 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • id 열은 μ •μˆ˜ν˜• 데이터 νƒ€μž…μœΌλ‘œ, 각 μ‚¬μš©μžλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” κΈ°λ³Έ ν‚€(Primary Key)μž…λ‹ˆλ‹€.
  • name 열은 VARCHAR(100) 데이터 νƒ€μž…μœΌλ‘œ μ΅œλŒ€ 100자의 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜λ©°, null 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • email 열은 UNIQUE μ œμ•½μ„ κ°€μ§‘λ‹ˆλ‹€. 즉, ν…Œμ΄λΈ” λ‚΄μ—μ„œ μ€‘λ³΅λœ 이메일이 μ €μž₯될 수 μ—†μŠ΅λ‹ˆλ‹€.
  • age 열은 μ •μˆ˜ν˜• 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • created_at 열은 νƒ€μž„μŠ€νƒ¬ν”„λ‘œ, 데이터가 μƒμ„±λœ μ‹œκ°„μ„ κΈ°λ‘ν•˜λŠ” μ—΄μž…λ‹ˆλ‹€.

3️⃣ ν…Œμ΄λΈ” μƒμ„±μ˜ λͺ©μ 

1. 데이터 μ €μž₯ 및 관리.

  • ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λ©΄, ν•΄λ‹Ή ꡬ쑰에 맞게 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 각 ν–‰(Row)은 ν•˜λ‚˜μ˜ λ ˆμ½”λ“œλ₯Ό λ‚˜νƒ€λ‚΄λ©°, ν…Œμ΄λΈ”μ— μ •μ˜λœ 각 μ—΄(Column)은 κ·Έ λ ˆμ½”λ“œμ˜ 속성을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

2. 데이터 무결성 보μž₯.

  • ν…Œμ΄λΈ”μ„ 생성할 λ•Œ μ •μ˜ν•˜λŠ” μ œμ•½ 쑰건(Primary Key, Foreign Key, Unique, Not Null λ“±)은 λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 보μž₯ν•©λ‹ˆλ‹€.

3. 효율적인 데이터 쑰회.

  • ν…Œμ΄λΈ”μ„ 톡해 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜μ—¬ μ €μž₯ν•˜λ©΄, SQL 쿼리λ₯Ό 톡해 효율적으둜 데이터λ₯Ό 검색, μˆ˜μ •, μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ μ ˆν•œ μΈλ±μŠ€μ™€ 관계 섀정을 톡해 λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ ν…Œμ΄λΈ”μ„ λ§Œλ“  ν›„

ν…Œμ΄λΈ”μ„ λ§Œλ“  ν›„, ν•΄λ‹Ή ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ‚½μž…ν•˜κ³ , ν•„μš”μ— 따라 데이터λ₯Ό 쑰회, μˆ˜μ •, μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν…Œμ΄λΈ”μ€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό λ…Όλ¦¬μ μœΌλ‘œ κ·Έλ£Ήν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 핡심적인 역할을 ν•©λ‹ˆλ‹€.