CS/λ°μ΄ν„°λ² μ΄μŠ€

[λ°μ΄ν„°λ² μ΄μŠ€] λ°μ΄ν„°λ² μ΄μŠ€ 기초(도메인, ν•„λ“œμ™€ λ ˆμ½”λ“œ)

1eehyunji 2023. 9. 4. 19:06

도메인(Domain)

λ„λ©”μΈμ΄λž€ λ¦΄λ ˆμ΄μ…˜μ— ν¬ν•¨λœ 각각의 속성듀이 κ°€μ§ˆ 수 μžˆλŠ” κ°’μ˜ 집합을 λ§ν•œλ‹€. 

예λ₯Ό λ“€μ–΄, μ„±λ³„μ΄λΌλŠ” 속성이 μžˆλ‹€λ©΄ 이 속성이 κ°€μ§ˆ 수 μžˆλŠ” 값은 {남, μ—¬}λΌλŠ” 집합이 λœλ‹€. 

 

ν•„λ“œμ™€ λ ˆμ½”λ“œ

'νšŒμ›'μ΄λΌλŠ” μ—”ν„°ν‹°λŠ” 'member'λΌλŠ” ν…Œμ΄λΈ”λ‘œ μ†μ„±μœΌλ‘œ 이름, 아이디, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έλ₯Ό κ°€μ§€κ³  있으며, 각각의 속성듀은 ν…Œμ΄λΈ”μ—μ„œ name, ID, address, phonenumberλΌλŠ” ν•„λ“œλ‘œ ν‘œν˜„ν•œλ‹€. 

또, 이 ν…Œμ΄λΈ”μ— ν–‰ λ‹¨μœ„μ˜ 데이터λ₯Ό 'λ ˆμ½”λ“œ' λ˜λŠ” 'νŠœν”Œ'이라 ν•œλ‹€. 

 

ν•„λ“œ νƒ€μž…

ν•„λ“œλŠ” νƒ€μž…μ„ κ°€μ§„λ‹€. 예λ₯Ό λ“€μ–΄, 이름은 λ¬Έμžμ—΄μ΄κ³ , μ „ν™”λ²ˆν˜ΈλŠ” 숫자인 것이닀. μ΄λŸ¬ν•œ νƒ€μž…μ€ DBMSλ§ˆλ‹€ λ‹€λ₯΄κ³  μ—¬κΈ°μ„œλŠ” MySQL을 κΈ°μ€€μœΌλ‘œ μ„€λͺ…ν•˜κ³ μž ν•œλ‹€. 

μ—¬λŸ¬ κ°€μ§€ νƒ€μž…μ΄ 있고 λŒ€ν‘œμ μΈ νƒ€μž…μΈ 숫자, λ‚ μ§œ, 문자 νƒ€μž…μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. 

  • 숫자 νƒ€μž…
    • TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 μžˆλ‹€.

  • λ‚ μ§œ νƒ€μž…
    • λ‚ μ§œ νƒ€μž…μœΌλ‘œλŠ” DATE, DATETIME, TIMESTAMP 등이 μžˆλ‹€.
    • DATE
      • λ‚ μ§œ λΆ€λΆ„λ§Œ μ‘΄μž¬ν•˜κ³ , μ‹œκ°„ 뢀뢄은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 값에 μ‚¬μš©λœλ‹€.
      • μ§€μ›λ˜λŠ” λ²”μœ„λŠ” 1000-01-01 ~ 9999-12-31이닀.
      • 3 λ°”μ΄νŠΈμ˜ μš©λŸ‰μ„ κ°€μ§„λ‹€.
    • DATETIME
      • λ‚ μ§œμ™€ μ‹œκ°„ 뢀뢄을 λͺ¨λ‘ κ°€μ§€λŠ” 값에 μ‚¬μš©λœλ‹€. 
      • μ§€μ›λ˜λŠ” λ²”μœ„λŠ” 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 이닀.
      • 8 λ°”μ΄νŠΈμ˜ μš©λŸ‰μ„ κ°€μ§„λ‹€.
    • TIMESTAMP
      • λ‚ μ§œμ™€ μ‹œκ°„ 뢀뢄을 λͺ¨λ‘ κ°€μ§€λŠ” 값에 μ‚¬μš©λœλ‹€.
      • 1970-01-01 00:00:01λΆ€ν„° 2038-01-19 03:14:07κΉŒμ§€ μ§€μ›ν•œλ‹€.
      • 4 λ°”μ΄νŠΈμ˜ μš©λŸ‰μ„ κ°€μ§„λ‹€.
      • TIMESTAMPλ₯Ό μ‚¬μš©ν•˜λŠ” 컬럼의 default κ°’μœΌλ‘œ NOW()λ₯Ό μ„ μ–Έν•΄μ£Όκ³  ON UPDATE κ°’μœΌλ‘œ NOW()λ₯Ό μ„ μ–Έν•΄μ£Όλ©΄ μ‚¬μš©μžκ°€ 별닀λ₯Έ μž…λ ₯을 μ£Όμ§€ μ•Šμ•„λ„ 데이터가 λ§ˆμ§€λ§‰μœΌλ‘œ μž…λ ₯λ˜κ±°λ‚˜ λ³€κ²½λœ μ‹œκ°„μ΄ μ €μž₯λœλ‹€.
      • λ”°λΌμ„œ, λ°μ΄ν„°μ˜ μ΅œμ’… λ³€κ²½ μ‹œκ°μ„ μ €μž₯ν•˜κ³  ν™•μΈν•˜λŠ” 데 μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.
UPDATE_DATE TIMESTAMP DEFAULT NOW() ON UPDATE NOW();
  • 문자 νƒ€μž…
    • 문자 νƒ€μž…μœΌλ‘œλŠ” CHAR, VARCHAR, TEXT, BLOB, ENUM, SET이 μžˆλ‹€. 
    • CHAR
      • κ·Έ μ•ˆμ— 수λ₯Ό μž…λ ₯ν•΄μ„œ λͺ‡ μžκΉŒμ§€ μž…λ ₯ν• μ§€ μ •ν•œλ‹€.
      • 예λ₯Ό λ“€μ–΄, CHAR(30)이라면 μ΅œλŒ€ 30μžκΉŒμ§€ μž…λ ₯ν•  수 μžˆλŠ” 것이닀.
      • CHARλŠ” κ³ μ • 길이 λ¬Έμžμ—΄μ΄λ©° κΈΈμ΄λŠ” 0~255 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
      • λ ˆμ½”λ“œλ₯Ό μ €μž₯ν•  λ•Œ 무쑰건 μ„ μ–Έν•œ 길이 κ°’μœΌλ‘œ 'κ³ μ •'ν•΄μ„œ μ €μž₯λœλ‹€. 
      • 예λ₯Ό λ“€μ–΄, CHAR(100)으둜 μ„ μ–Έν•œ ν›„, 10자만 μ €μž₯해도 100 λ°”μ΄νŠΈλ‘œ μ €μž₯λœλ‹€.
      • μœ λ™μ μ΄μ§€ μ•Šμ€ 길이λ₯Ό κ°€μ§„ λ°μ΄ν„°μ˜ 경우 νš¨μœ¨μ μ΄λ‹€.
    •  VARCHAR
      • CHARκ³Ό λ™μΌν•˜κ²Œ 수λ₯Ό μž…λ ₯ν•΄μ„œ λͺ‡ μžκΉŒμ§€ μž…λ ₯ν• μ§€ μ •ν•œλ‹€. 
      • κ°€λ³€ 길이 λ¬Έμžμ—΄μ΄λ©° κΈΈμ΄λŠ” 0~65,535 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
      • μž…λ ₯된 데이터에 따라 μš©λŸ‰μ„ κ°€λ³€μ‹œμΌœ μ €μž₯ν•œλ‹€. 
      • 예λ₯Ό λ“€μ–΄, VARCHAR(100)으둜 μ„ μ–Έν–ˆλ”λΌλ„ 10자 이메일을 μ €μž₯ν•œ 경우 10μžμ— ν•΄λ‹Ήν•˜λŠ” 10 λ°”μ΄νŠΈ + 길이기둝용 1 λ°”μ΄νŠΈλ‘œ μ €μž₯ν•˜κ²Œ λœλ‹€.
      • μœ λ™μ μΈ 길이λ₯Ό κ°€μ§„ λ°μ΄ν„°μ˜ 경우 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
    • TEXT와 BLOB
      • 두 νƒ€μž… λͺ¨λ‘ 크기가 큰 데이터λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” νƒ€μž…μ΄λ‹€.
      • TEXTλŠ” 큰 λ¬Έμžμ—΄ μ €μž₯에 μ“°λ©°, 주둜 κ²Œμ‹œνŒ 본문을 μ €μž₯ν•  λ•Œ 쓰인닀.
      • BLOB은 이미지, λ™μ˜μƒ λ“± 큰 데이터 μ €μž₯에 쓰인닀. ν•˜μ§€λ§Œ, 보톡은 μ•„λ§ˆμ‘΄μ˜ 이미지 ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€μΈ S3λ₯Ό μ΄μš©ν•˜λŠ” λ“± μ„œλ²„μ— νŒŒμΌμ„ 올리고 νŒŒμΌμ— κ΄€ν•œ 경둜λ₯Ό VARCHAR둜 μ €μž₯ν•œλ‹€.
    • ENUM
      • λ¬Έμžμ—΄μ„ μ—΄κ±°ν•œ νƒ€μž…μ΄λ‹€.
      • ENUM('small','medium','large','x-large') ν˜•νƒœλ‘œ 쓰인닀.
      • 이 μ€‘μ—μ„œ ν•˜λ‚˜λ§Œ μ„ νƒν•˜λŠ” 단일 μ„ νƒλ§Œ κ°€λŠ₯ν•˜λ‹€. 
      • ENUM λ¦¬μŠ€νŠΈμ— μ—†λŠ” 잘λͺ»λœ 값을 μ‚½μž…ν•˜λ©΄ 빈 λ¬Έμžμ—΄μ΄ λŒ€μ‹  μ‚½μž…λœλ‹€. 
      • ENUM을 μ‚¬μš©ν•˜λ©΄ ENUM μ•ˆμ— small, mediumκ³Ό 같은 λ¬Έμžμ—΄λ“€μ΄ 0, 1 λ“± 숫자둜 λ§€ν•‘λ˜μ–΄ λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•˜λŠ” 이점이 μžˆλ‹€.
      • ENUM은 μ΅œλŒ€ 65,535 개의 μš”μ†Œλ“€μ„ 넣을 수 μžˆλ‹€. 
    • SET
      • ENUMκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, μ—¬λŸ¬ 개의 데이터λ₯Ό 선택할 수 있고 λΉ„νŠΈ λ‹¨μœ„μ˜ 연산을 ν•  수 있으며 μ΅œλŒ€ 64개의 μš”μ†Œλ₯Ό 집어넣을 수 μžˆλ‹€λŠ” 점이 λ‹€λ₯΄λ‹€. 
      • 참고둜 ENUMμ΄λ‚˜ SET을 μ‚¬μš©ν•  경우 λ©”λͺ¨λ¦¬μ μœΌλ‘œλŠ” 이점이 μžˆμ„ 수 μžˆμ§€λ§Œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μˆ˜μ •μ— 따라 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ENUM, SETμ—μ„œ μ •μ˜ν•œ λͺ©λ‘μ„ μˆ˜μ •ν•΄μ•Ό ν•œλ‹€λŠ” 단점이 μžˆλ‹€.