샘플 쇼핑몰 데이터베이스

모든 예제는 고객, 상품 카탈로그, 주문, 직원을 담은 이 쇼핑몰 데이터베이스에서 실행합니다. 약 5만 행이 있어 그룹화와 인덱스의 동작도 실제와 비슷한 조건에서 볼 수 있습니다.

쿼리를 작성하다 테이블이나 컬럼 이름이 필요하면 이 페이지를 참고하세요. 예제와 다른 쿼리를 직접 작성할 때도 도움이 됩니다.

아래 정보는 샘플 파일에서 읽어 왔으며 앱에 표시되는 구조와 같습니다.

고정폭으로 표시한 컬럼 이름이 SQL에 직접 입력하는 이름입니다. 비고 칸에는 데이터베이스가 각 컬럼에 대해 정의한 정보가 표시됩니다.

  • 기본 키 — 그 행을 식별합니다. 중복되지 않고 비어 있을 수 없습니다.
  • 필수 — 비워 둘 수 없는 컬럼입니다(NOT NULL). 이 표시가 없는 컬럼은 NULL을 가질 수 있고, 그게 필터 레슨에서 다루는 내용입니다.
  • → 테이블.컬럼 — 외래 키입니다. 이 컬럼은 저 테이블의 값을 담고 있고, 조인은 이걸 따라갑니다.
  • 고유 — 두 행이 같은 값을 가질 수 없습니다. UPSERT가 충돌을 판단하는 기준이 이것입니다.
  • 인덱스 — 데이터베이스가 이 컬럼의 정렬된 사본을 따로 갖고 있어서, 이 컬럼으로 거르거나 정렬하는 것이 빠릅니다. 마지막 레슨에서 설명합니다.

상품

categories 33행

컬럼타입비고
idINTEGER기본 키
nameTEXT필수, 고유
descriptionTEXT
parent_idINTEGER→ categories.id, 인덱스
sort_orderINTEGER필수, 기본값 0
is_activeINTEGER필수, 기본값 1

products 400행

컬럼타입비고
idINTEGER기본 키
category_idINTEGER→ categories.id, 필수, 인덱스
nameTEXT필수
descriptionTEXT
skuTEXT필수, 고유
priceREAL필수, 인덱스, 기본값 0
costREAL필수, 기본값 0
stock_quantityINTEGER필수, 기본값 0
weight_kgREAL
attributesTEXT
is_activeINTEGER필수, 기본값 1
created_atTEXT필수
updated_atTEXT필수

product_images 1,024행

컬럼타입비고
idINTEGER기본 키
product_idINTEGER→ products.id, 필수, 인덱스
urlTEXT필수
alt_textTEXT
sort_orderINTEGER필수, 기본값 0
is_primaryINTEGER필수, 기본값 0

tags 15행

컬럼타입비고
idINTEGER기본 키
nameTEXT필수, 고유

product_tags 624행

컬럼타입비고
product_idINTEGER기본 키, → products.id
tag_idINTEGER기본 키, → tags.id

suppliers 12행

컬럼타입비고
idINTEGER기본 키
nameTEXT필수
contact_nameTEXT
emailTEXT
phoneTEXT
countryTEXT
ratingREAL
is_activeINTEGER필수, 기본값 1

product_suppliers 579행

컬럼타입비고
product_idINTEGER기본 키, → products.id
supplier_idINTEGER기본 키, → suppliers.id
supplier_skuTEXT
unit_costREAL필수
lead_time_daysINTEGER필수, 기본값 7

inventory_logs 11,547행

컬럼타입비고
idINTEGER기본 키
product_idINTEGER→ products.id, 필수, 인덱스
change_qtyINTEGER필수
reasonTEXT필수
referenceTEXT
employee_idINTEGER→ employees.id
logged_atTEXT필수, 인덱스

고객

customers 1,500행

컬럼타입비고
idINTEGER기본 키
first_nameTEXT필수, 인덱스
last_nameTEXT필수, 인덱스
emailTEXT필수, 고유
phoneTEXT
birth_dateTEXT
countryTEXT필수, 인덱스, 기본값 'US'
marketing_opt_inINTEGER필수, 기본값 0
loyalty_pointsINTEGER필수, 기본값 0
created_atTEXT필수
updated_atTEXT필수

addresses 1,959행

컬럼타입비고
idINTEGER기본 키
customer_idINTEGER→ customers.id, 필수, 인덱스
labelTEXT필수, 기본값 'home'
line1TEXT필수
line2TEXT
cityTEXT필수
postal_codeTEXT
countryTEXT필수
is_defaultINTEGER필수, 기본값 0

wishlists 2,493행

컬럼타입비고
customer_idINTEGER기본 키, → customers.id
product_idINTEGER기본 키, → products.id
added_atTEXT필수

reviews 2,992행

컬럼타입비고
idINTEGER기본 키
product_idINTEGER→ products.id, 필수, 고유
customer_idINTEGER→ customers.id, 필수, 고유
ratingINTEGER필수
titleTEXT
bodyTEXT
is_verifiedINTEGER필수, 기본값 0
helpful_votesINTEGER필수, 기본값 0
created_atTEXT필수

notifications 3,000행

컬럼타입비고
idINTEGER기본 키
customer_idINTEGER→ customers.id, 필수, 인덱스
typeTEXT필수
titleTEXT필수
bodyTEXT
is_readINTEGER필수, 인덱스, 기본값 0
created_atTEXT필수

주문

orders 4,000행

컬럼타입비고
idINTEGER기본 키
order_numberTEXT필수, 고유
customer_idINTEGER→ customers.id, 필수, 인덱스
address_idINTEGER→ addresses.id
shipping_method_idINTEGER→ shipping_methods.id
coupon_idINTEGER→ coupons.id
statusTEXT필수, 인덱스
subtotalREAL필수, 기본값 0
discountREAL필수, 기본값 0
shipping_costREAL필수, 기본값 0
totalREAL필수, 기본값 0
notesTEXT
ordered_atTEXT필수, 인덱스
updated_atTEXT필수

order_items 12,091행

컬럼타입비고
idINTEGER기본 키
order_idINTEGER→ orders.id, 필수, 고유
product_idINTEGER→ products.id, 필수, 고유
quantityINTEGER필수
unit_priceREAL필수

payments 3,651행

컬럼타입비고
idINTEGER기본 키
order_idINTEGER→ orders.id, 필수, 인덱스
methodTEXT필수
amountREAL필수
currencyTEXT필수, 기본값 'USD'
statusTEXT필수
transaction_refTEXT
paid_atTEXT

shipments 2,319행

컬럼타입비고
idINTEGER기본 키
order_idINTEGER→ orders.id, 필수, 인덱스
carrierTEXT필수
tracking_numberTEXT
shipped_atTEXT
delivered_atTEXT

shipping_methods 5행

컬럼타입비고
idINTEGER기본 키
nameTEXT필수, 고유
base_costREAL필수
est_daysINTEGER필수
is_activeINTEGER필수, 기본값 1

coupons 10행

컬럼타입비고
idINTEGER기본 키
codeTEXT필수, 고유
discount_typeTEXT필수
discount_valueREAL필수
min_orderREAL필수, 기본값 0
starts_atTEXT필수
ends_atTEXT필수
max_usesINTEGER
used_countINTEGER필수, 기본값 0

직원

departments 10행

컬럼타입비고
idINTEGER기본 키
nameTEXT필수, 고유
descriptionTEXT
created_atTEXT필수

employees 120행

컬럼타입비고
idINTEGER기본 키
department_idINTEGER→ departments.id, 필수, 인덱스
manager_idINTEGER→ employees.id, 인덱스
first_nameTEXT필수
last_nameTEXT필수
emailTEXT필수, 고유
phoneTEXT
hire_dateTEXT필수
salaryREAL필수, 기본값 0
positionTEXT
is_activeINTEGER필수, 기본값 1

audit_logs 2,000행

컬럼타입비고
idINTEGER기본 키
employee_idINTEGER→ employees.id
actionTEXT필수
table_nameTEXT필수, 인덱스
record_idINTEGER인덱스
old_valuesTEXT
new_valuesTEXT
ip_addressTEXT
created_atTEXT필수

설정

settings 8행

컬럼타입비고
keyTEXT기본 키
valueTEXT필수
descriptionTEXT
updated_atTEXT필수

뷰

뷰는 저장된 쿼리를 테이블처럼 사용할 수 있게 한 객체입니다. SELECT로 조회할 수 있지만 행을 따로 저장하지는 않습니다. 아래 네 뷰는 위 테이블의 데이터를 요약합니다.

v_customer_lifetime 1,500행

컬럼타입비고
customer_idINTEGER
customerTEXT
countryTEXT
ordersTEXT
revenueTEXT
first_orderTEXT
last_orderTEXT

v_low_stock 44행

컬럼타입비고
idINTEGER
skuTEXT
nameTEXT
stock_quantityINTEGER
categoryTEXT

v_order_summary 4,000행

컬럼타입비고
order_idINTEGER
order_numberTEXT
statusTEXT
ordered_atTEXT
customerTEXT
countryTEXT
itemsTEXT
totalREAL

v_product_sales 400행

컬럼타입비고
product_idINTEGER
nameTEXT
skuTEXT
categoryTEXT
units_soldTEXT
revenueTEXT
avg_ratingTEXT
review_countTEXT