Home > DB > πŸ’Ύ[Database] μŠ€ν‚€λ§ˆ(Schema)λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ[Database] μŠ€ν‚€λ§ˆ(Schema)λž€ λ¬΄μ—‡μΌκΉŒμš”?
Database

πŸ’Ύ[Database] μŠ€ν‚€λ§ˆ(Schema)λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • μŠ€ν‚€λ§ˆ(Schema)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” μš©μ–΄λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터가 μ–΄λ–»κ²Œ μ €μž₯되고, μ–΄λ–»κ²Œ μ‘°μ§ν™”λ˜λŠ”μ§€λ₯Ό μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ 논리적 섀계λ₯Ό λ‚˜νƒ€λ‚΄λ©΄, ν…Œμ΄λΈ”, λ·°, 인덱슀, 트리거, μ €μž₯ ν”„λ‘œμ‹œμ €, μ œμ•½ 쑰건 λ“±κ³Ό 같은 λ°μ΄ν„°λ² μ΄μŠ€ 객체듀이 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜λŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

1️⃣ μŠ€ν‚€λ§ˆμ˜ μ£Όμš” μš”μ†Œ.

1️⃣ ν…Œμ΄λΈ”(Table).

  • μŠ€ν‚€λ§ˆ(Schema)μ—μ„œ κ°€μž₯ 기본적인 μš”μ†Œλ‘œ, 데이터λ₯Ό ν–‰(Row)κ³Ό μ—΄(Column) ν˜•μ‹μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.
  • 각 ν…Œμ΄λΈ”μ€ ν•˜λ‚˜μ˜ μ—”ν‹°ν‹°(예: μ‚¬μš©μž, μ œν’ˆ λ“±)λ₯Ό ν‘œν˜„ν•˜λ©°, ν…Œμ΄λΈ”μ˜ μ—΄(Column)은 속성을, 행은 각 개체의 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

2️⃣ 컬럼(Column).

  • ν…Œμ΄λΈ”μ˜ 각 ν•„λ“œλ₯Ό λ‚˜νƒ€λ‚΄λ©°, 데이터 μœ ν˜•(μ •μˆ˜, λ¬Έμžμ—΄ λ“±)κ³Ό μ œμ•½ 쑰건(예: NOT NULL, UNIQUE)이 μ„€μ •λ©λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)μ—μ„œ 컬럼(Column, μ—΄)의 이름, 데이터 νƒ€μž…, 크기 등을 μ •μ˜ν•©λ‹ˆλ‹€.

3️⃣ κΈ°λ³Έ ν‚€(Primary Key)

  • ν…Œμ΄λΈ”μ—μ„œ 각 ν–‰(Row)을 κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” νŠΉμ • μ—΄(λ˜λŠ” μ—΄μ˜ μ‘°ν•©)μž…λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)μ—μ„œ κΈ°λ³Έ ν‚€(Primary Key)λŠ” νŠΉμ • ν…Œμ΄λΈ”μ—μ„œ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” κ°’μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

4️⃣ μ™Έλž˜ ν‚€(Foreign Key)

  • λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€(Primary Key)와 μ—°κ²°λ˜λŠ” μ—΄(Column)둜, 두 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)μ—μ„œ μ™Έλž˜ ν‚€(Foreign Key)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” κ°„μ˜ μ°Έμ‘° 무결성을 μœ μ§€ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

5️⃣ 인덱슀(Index)

  • 검색 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ˜ νŠΉμ • μ—΄(Column)에 λŒ€ν•œ 인덱슀λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)μ—μ„œ μΈλ±μŠ€λŠ” λ°μ΄ν„°μ˜ 효율적인 검색을 μœ„ν•œ 좔가적인 ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

6️⃣ λ·°(View)

  • ν•˜λ‚˜ μ΄μƒμ˜ ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό μΆ”μΆœν•˜μ—¬ λ³΄μ—¬μ£ΌλŠ” κ°€μƒμ˜ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.
    • λ°μ΄ν„°λ² μ΄μŠ€ 내에 물리적으둜 μ €μž₯λ˜μ§€ μ•Šκ³ , SQL(Structured Query Language) 쿼리 κ²°κ³Όλ₯Ό 톡해 μƒμ„±λ©λ‹ˆλ‹€.

7️⃣ μ œμ•½ 쑰건(Constraints)

  • 데이터 무결성을 보μž₯ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ΄λ‚˜ μ—΄(Column)에 μ μš©λ˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, NOT NULL, UNIQUE, CHECK, FOREIGN KEY λ“±μ˜ μ œμ•½ 쑰건이 μŠ€ν‚€λ§ˆμ— μ •μ˜λ©λ‹ˆλ‹€.

2️⃣ μŠ€ν‚€λ§ˆμ˜ μ’…λ₯˜.

1️⃣ 논리적 μŠ€ν‚€λ§ˆ(Logical Schema)

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 전체적인 논리적 ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • ν…Œμ΄λΈ”, λ·°, 인덱슀 λ“±μ˜ 논리적인 ꡬ쑰λ₯Ό μ •μ˜ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©μžλ“€μ΄ 데이터λ₯Ό μ–΄λ–»κ²Œ λ³Όμ§€λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

2️⃣ 물리적 μŠ€ν‚€λ§ˆ(Physical Schema)

  • 데이터가 μ‹€μ œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ–΄λ–»κ²Œ μ €μž₯λ˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • μ΄λŠ” ν•˜λ“œμ›¨μ–΄ λ ˆλ²¨μ—μ„œ 데이터가 μ €μž₯λ˜λŠ” 방식을 μ„€λͺ…ν•˜λ©°, 데이터 파일, 인덱슀 파일 등이 ν¬ν•¨λ©λ‹ˆλ‹€.

3️⃣ μ‚¬μš©μž μŠ€ν‚€λ§ˆ(User Schema)

  • νŠΉμ • μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • 일반적으둜 μ‚¬μš©μžλŠ” 전체 λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ•„λ‹Œ, νŠΉμ • λ·°λ‚˜ ν…Œμ΄λΈ”λ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€μ •λ©λ‹ˆλ‹€.

3️⃣ μŠ€ν‚€λ§ˆ μ˜ˆμ‹œ.

  • μŠ€ν‚€λ§ˆλŠ” SQL을 톡해 μ •μ˜ν•  수 있으며, 이λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰가 μ„€μ •λ©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž ν…Œμ΄λΈ”μ˜ μŠ€ν‚€λ§ˆλŠ” λ‹€μŒκ³Ό 같이 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
CREATE TABLE Users (
    user_id INT PRIMARY KEY, -- κΈ°λ³Έ ν‚€
    username VARCHAR(50) NOT NULL -- NULL을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
    email VARCHAR(100) UNIQUE, -- κ³ μœ ν•œ κ°’
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
  • μœ„ μŠ€ν‚€λ§ˆ μ •μ˜μ—μ„œλŠ” User ν…Œμ΄λΈ”μ΄ μƒμ„±λ˜λ©°, λ‹€μŒκ³Ό 같은 ꡬ쑰λ₯Ό κ°€μ§‘λ‹ˆλ‹€.
    • user_id: κΈ°λ³Έ ν‚€(Primary Key)둜, κ³ μœ ν•œ μ‚¬μš©μž μ‹λ³„μžμž…λ‹ˆλ‹€.
    • username: μ‚¬μš©μžμ˜ 이름을 μ €μž₯ν•˜λ©°, NULL을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • email: μ‚¬μš©μžμ˜ 이메일을 μ €μž₯ν•˜λ©°, κ³ μœ ν•œ 값이어야 ν•©λ‹ˆλ‹€.
    • created_at: μ‚¬μš©μžκ°€ μƒμ„±λœ μ‹œκ°„μ„ λ‚˜νƒ€λ‚΄λ©°, κΈ°λ³Έκ°’μœΌλ‘œ ν˜„μž¬ μ‹œκ°„μ„ μ €μž₯ν•©λ‹ˆλ‹€.

4️⃣ μŠ€ν‚€λ§ˆμ˜ μ—­ν• .

  • 데이터 ꡬ쑰 μ •μ˜
    • μŠ€ν‚€λ§ˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ˜ λͺ¨λ“  데이터 ꡬ쑰λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
      • μ΄λŠ” ν…Œμ΄λΈ”, μ—΄(Column), μ œμ•½ 쑰건 등을 λͺ…ν™•ν•˜κ²Œ μ •μ˜ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€.
  • 데이터 무결성 μœ μ§€
    • μŠ€ν‚€λ§ˆλŠ” μ œμ•½ 쑰건과 κ·œμΉ™μ„ μ„€μ •ν•˜μ—¬ λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μ™Έλž˜ ν‚€(Foreign Key) μ œμ•½ 쑰건은 데이터 κ°„μ˜ μ°Έμ‘° 무결성을 μœ μ§€ν•©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ 관리
    • μŠ€ν‚€λ§ˆ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 관리λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜λ©°, κ°œλ°œμžλ‚˜ DBA(Database Administrator)κ°€ 데이터 ꡬ쑰λ₯Ό μ„€κ³„ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

5️⃣ μš”μ•½.

  • μŠ€ν‚€λ§ˆ(Schema)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰의 섀계λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 데이터가 μ–΄λ–»κ²Œ μ €μž₯되고 μ‘°μ§λ˜λŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  • ν…Œμ΄λΈ”(Table), μ—΄(Column), 인덱슀(Index), λ·°(View), μ œμ•½ 쑰건(Constraints) 등이 μŠ€ν‚€λ§ˆμ— ν¬ν•¨λ˜λ©°, 이λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성과 무결성을 보μž₯ν•©λ‹ˆλ‹€.
  • μŠ€ν‚€λ§ˆ(Schema)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ 논리적 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 데 맀우 μ€‘μš”ν•œ μš”μ†Œμ΄λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 효율적인 운영과 관리에 ν•„μˆ˜μ μž…λ‹ˆλ‹€.