πŸ“ μ œμ•½ (CONSTRAINT) κ°œλ…

YunsungΒ·2024λ…„ 12μ›” 16일
post-thumbnail

μ œμ•½(CONSTRAINT)μ΄λž€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 보μž₯ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ— μ„€μ •ν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€. μ œμ•½μ„ μ‚¬μš©ν•˜λ©΄ 데이터 μž…λ ₯μ΄λ‚˜ μˆ˜μ • μ‹œ νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•ŠμœΌλ©΄ μž‘μ—…μ΄ μˆ˜ν–‰λ˜μ§€ μ•Šλ„λ‘ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 일관성과 정확성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ œμ•½μ€ 주둜 ν…Œμ΄λΈ”μ„ 생성할 λ•Œ μ„€μ •ν•˜κ±°λ‚˜, ν…Œμ΄λΈ”μ΄ 이미 μ‘΄μž¬ν•˜λŠ” κ²½μš°μ—λ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ” μ œμ•½μ˜ μœ ν˜•

μ œμ•½μ€ 크게 λ‹€μŒκ³Ό 같은 μœ ν˜•μœΌλ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. κΈ°λ³Έ ν‚€ (PRIMARY KEY)
  2. μ™Έλž˜ ν‚€ (FOREIGN KEY)
  3. μœ λ‹ˆν¬ (UNIQUE)
  4. 체크 (CHECK)
  5. 널 κ°’ μ œν•œ (NOT NULL)
  6. κΈ°λ³Έκ°’ (DEFAULT)

1. κΈ°λ³Έ ν‚€ (PRIMARY KEY)

  • ν…Œμ΄λΈ”μ˜ 각 행을 μœ μΌν•˜κ²Œ 식별할 수 μžˆλŠ” μ»¬λŸΌμ— μ„€μ •ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ ν‚€λŠ” NULL 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ©°, 쀑볡 값을 κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY, -- κΈ°λ³Έ ν‚€ μ„€μ •
       emp_name VARCHAR(50)
    );
    μ„€λͺ…: emp_id μ»¬λŸΌμ€ κΈ°λ³Έ ν‚€λ‘œ μ„€μ •λ˜μ–΄ μ€‘λ³΅λ˜κ±°λ‚˜ NULL인 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. μ™Έλž˜ ν‚€ (FOREIGN KEY)

  • ν•œ ν…Œμ΄λΈ”μ˜ 컬럼이 λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ°Έμ‘°ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
  • 두 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜λ©°, λ°μ΄ν„°μ˜ μ°Έμ‘° 무결성을 보μž₯ν•©λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE departments (
       dept_id INT PRIMARY KEY,
       dept_name VARCHAR(50)
    );
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY,
       emp_name VARCHAR(50),
       dept_id INT,
       FOREIGN KEY (dept_id) REFERENCES departments(dept_id) -- μ™Έλž˜ ν‚€ μ„€μ •
    );

μ„€λͺ…: employees ν…Œμ΄λΈ”μ˜ dept_id μ»¬λŸΌμ€ departments ν…Œμ΄λΈ”μ˜ dept_idλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

3. μœ λ‹ˆν¬ (UNIQE)

  • νŠΉμ • 컬럼의 값이 μ€‘λ³΅λ˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
  • NULL 값은 ν—ˆμš©ν•˜μ§€λ§Œ, NULL κ°’ λ˜ν•œ μ€‘λ³΅λ˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY,
       email VARCHAR(100) UNIQUE -- μœ λ‹ˆν¬ μ œμ•½ μ„€μ •
    );
    μ„€λͺ…: email μ»¬λŸΌμ€ μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

4. 체크 (CHECK)

  • 컬럼의 값이 νŠΉμ • 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•˜λŠ”μ§€ κ²€μ‚¬ν•˜λŠ” μ œμ•½μž…λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY,
       age INT CHECK (age >= 18) -- CHECK μ œμ•½ μ„€μ •
    );
    μ„€λͺ…: age μ»¬λŸΌμ€ 18 μ΄μƒμ˜ κ°’λ§Œ ν—ˆμš©λ©λ‹ˆλ‹€.

5. 널 κ°’ μ œν•œ (NOT NULL)

  • νŠΉμ • 컬럼이 NULL 값을 ν—ˆμš©ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY,
       emp_name VARCHAR(50) NOT NULL -- NOT NULL μ œμ•½ μ„€μ •
    );
    μ„€λͺ…: emp_name μ»¬λŸΌμ€ NULL 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


6. κΈ°λ³Έκ°’(DEFAULT)

  • μ»¬λŸΌμ— λ³„λ„μ˜ 값을 μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ 기본값이 μžλ™μœΌλ‘œ μ €μž₯λ˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
    μ˜ˆμ‹œ
    CREATE TABLE employees (
       emp_id INT PRIMARY KEY,
       emp_name VARCHAR(50),
       hire_date DATE DEFAULT CURRENT_DATE -- κΈ°λ³Έκ°’ μ„€μ •
    );
    μ„€λͺ…: hire_date μ»¬λŸΌμ— 값이 μž…λ ₯λ˜μ§€ μ•ŠμœΌλ©΄ ν˜„μž¬ 날씨가 κΈ°λ³Έκ°’μœΌλ‘œ μ €μž₯λ©λ‹ˆλ‹€.

πŸ“Š μ œμ•½ μ‚¬μš©μ˜ λͺ©μ κ³Ό μž₯점

  1. 데이터 무결성 보μž₯: μ œμ•½μ„ 톡해 λ°μ΄ν„°μ˜ 일관성과 정확성을 μœ μ§€ν•©λ‹ˆλ‹€.
  2. 데이터 ν’ˆμ§ˆ ν–₯상: 잘λͺ»λœ 데이터 μž…λ ₯을 λ°©μ§€ν•©λ‹ˆλ‹€.
  3. 관계 μ„€μ •: ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ„€μ •ν•΄ μ°Έμ‘° 무결성을 보μž₯ν•©λ‹ˆλ‹€.
  4. μžλ™ν™”λœ 데이터 관리: μ œμ•½μ„ 톡해 λ°μ΄ν„°μ˜ μœ νš¨μ„±μ„ μžλ™μœΌλ‘œ κ²€μ‚¬ν•©λ‹ˆλ‹€.


⚠️ μ œμ•½ μ„€μ • μ‹œ μ£Όμ˜μ‚¬ν•­

  1. μ„±λŠ₯ 문제: μ œμ•½μ΄ λ§Žμ„μˆ˜λ‘ 데이터 μž…λ ₯, μˆ˜μ • μ‹œ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μ œμ•½ μΆ”κ°€/μˆ˜μ • μ œν•œ: 이미 데이터가 μ‘΄μž¬ν•˜λŠ” 경우 일뢀 μ œμ•½ μΆ”κ°€λ‚˜ 변경이 μ œν•œλ  수 μžˆμŠ΅λ‹ˆλ‹€.(이미 NULL인 데이터가 μžˆλŠ”λ° NOT NULL 쑰건을 μΆ”κ°€ν•˜λ €λŠ” 경우)
  3. NULL 처리: NOT NULLκ³Ό CHECK 쑰건이 μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
profile
ν’€μŠ€νƒ κ°œλ°œμžλ‘œμ„œμ˜ 도전을 ν•˜λŠ” μ€‘μž…λ‹ˆλ‹€. λ§Žμ€ 응원 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€!!😁

0개의 λŒ“κΈ€