루비온레일즈에서는 ActiveRecord라는 ORM을 사용한다
# app/models/order.rb
class Order < ApplicationRecord
end
Order
모델이 상속받는 ApplicationRecord
는 모든 모델에서 공통으로 사용하는 기능을 넣을 수 있도록 레일즈 5.0부터 추가되었음 Order
는 ApplicationRecord
를 상속받고, ApplicationRecord
는 ActiveRecord
를 상속받음ActiveRecord
는 데이터를 읽고(find) 쓰는(create)등의 기능을 제공함Order
모델은 빈 클래스지만 ActiveRecord
에서 제공하는 기능을 모두 사용할 수 있음NATIVE_DATABASE_TYPES = {
# 선택한 데이터베이스에 필요한 기본 키 데이터 유형으로 변환
primary_key: "bigint auto_increment PRIMARY KEY",
# 이름 및 이메일과 같은 짧은 문자열에 사용
string: { name: "varchar", limit: 255 },
# 일반적으로 textarea에 의해 캡처되는 긴 문자열에 사용
text: { name: "text" },
# 정수에 사용 ex) 0,12,1253
integer: { name: "int", limit: 4 },
# 고정 부동 소수점 정밀도로 저장된 10진수에 사용
float: { name: "float", limit: 24 },
# 저장된 정밀도는 다양함. 정확한 수학 계산에 적합
decimal: { name: "decimal" },
# 날짜와 시간 모두 필요시 사용
datetime: { name: "datetime" },
# 날짜와 시간, 시간대 모두 필요시 사용. 일반적으로 created_at / updated_at에 사용됨
timestamp: { name: "timestamp" },
# 시, 분, 초 필요시 사용
time: { name: "time" },
# 년, 월, 일 필요시 사용
date: { name: "date" },
# 이미지, 비디오 및 기타 파일을 Blob이라는 데이터 정크에 원래 형식으로 저장할 때 사용
binary: { name: "blob" },
# 바이너리와 유사하며 파일에 대한 메타 데이터를 포함. Blob은 변경할 수 없음
blob: { name: "blob" },
# true/false 값에 사용
boolean: { name: "tinyint", limit: 1 },
# rails5 부터 생김. 기본적으로 JSON 값을 저장할 수 있음 . (많은 사람들이 여전히 Postgres의 jsonb 데이터 유형을 사용함)
json: { name: "json" },
}
1) 시간대에 영향을 받지 않는 1970년 이전 또는 2038 년 이후 날짜와 시간을 저장해야 한다면 => DATETIME
2) 데이터베이스 크기에 대해 걱정할 필요가 있고 저장할 데이터가 1970 ~ 2038 기간 내에 있다면? => TIMESTAMP
3) 날짜만 저장하면 되나요? => DATE
4) 시간만 저장하면 되나요? => TIME
: datetime (8byte)
: timestamp (4byte)
: date (3byte)
: time (3byte)
datetime
vs timestamp
1) 고정길이 -> varchar(길이)
2) 가변길이 -> char(길이)
3) 가변길이 문자열(더 긴거) -> text
Q. 고정길이는 어떨때 씀?
Q. 가변길이는 어떨 때 씀?
char(n)
vs varchar(n)
vs test
vs string
in PostgreSQL