Schema and Query Design

Schema란?

스키마(Schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명입니다. (데이터베이스의 청사진)

Entity(엔티티)

고유한 정보의 단위입니다. (내 기준으로는 models)와 같은 느낌..?)
엔티티는 데이터베이스에서 테이블로 표시할 수 있습니다.

Field(필드)

각 엔티티에는 특성을 설명하는 필드가 있고 열에 해당됩니다. 테이블에 저장된 모든 항목에는 해당 필드가 포함됩니다.

record(레코드)

행렬에서의 행이라고 볼 수 있습니다. 하나의 레코드(행)은 테이블에 저장된 항목입니다.


데이터베이스 설계

관계형 데이터베이스

구조화된 데이터는 하나의 테이블로 표현할 수 있습니다.

  • 데이터: 각 항목에 저장되는 값입니다.
  • 테이블: 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적
  • 칼럼(col): 테이블의 한 열을 가리킵니다.
  • 레코드(record): 테이블의 한 행에 저장된 데이터입니다.
  • 키(key): 테이블의 각 레코드를 구분할 수 있는 값입니다. (기본키 primary key)를 가집니다.

관계 종류

테이블과 테이블 사이의 관계는

  • 1:1 관계
  • 1:N 관계
  • N:N 관계

1:1 관계

하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우입니다.

(1:1 관계는 일반적으로 자주 사용하지 않습니다.)

1:N 관계

하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우입니다.

여러 명의 유저가 하나의 전화번호를 가질 수 없지만 한 명의 유저가 여러개의 전화번호를 가질 수 있습니다.

1:N 관계는 관계형 데이터베이스에서 가장 많이 사용됩니다.

N:N 관계

여러 개의 레코드가 여러 개의 레코드와 관계가 있는 경우 입니다. 스키마를 디자인 할 때 join 테이블을 만들어 관리합니다. 1:N관계와 비슷하지만, 양방향에서 다수의 레코드를 가질 수 있습니다.

ex) 고객 한 명은 여러 여행 상품을 구매할 수 있고, 여행 상품 하나는 여러 명의 고객이 구매할 수 있습니다.

N:N 관계를 위해서는 테이블을 조인합니다.

Customer 테이블과 Package 테이블을 customer_package로 조인해 묶어줍니다.


SQL More

SQL 내장함수

집합연산: 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산

  • GROUP BY
    데이터를 조회할 때 그룹으로 묶어서 조회합니다.
SELECT * FROM customers;
GROUP BY State;

customer내 쿼리를 state만 묶어서 표현할 수 있습니다.

  • HAVING
    HAVING은 GROUP BY로 조회된 결과를 필터링할 수 있습니다.
SELECT CustomerId, AVG(Total) FROM invoices GROUP BY CustomerId HAVING AVG(Total) > 6.00;

invoices 테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과만 조회합니다.

  • COUNT()
    COUNT 함수는 레코드의 개수를 확인할 때 사용합니다.
SELECT State, COUNT(*) FROM customers;
GROUP BY State;

customers 테이블의 State에 해당하는 레코드 개수를 확인 할 수 있습니다.

  • SUM()
    레코드의 합을 리턴합니다.
SELECT InvoiceId, SUM(UnitPrice) FROM invoice_items GROUP BY InvoiceId;

invoice_items 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구합니다.

  • AVG()
    레코드의 평균값을 계산하는 함수입니다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
  • MAX(), MIN()
    각각 레코드의 최대값과 최소값을 리턴합니다.
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId

profile
Hello World

0개의 댓글