스키마(Schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명입니다. (데이터베이스의 청사진)
고유한 정보의 단위입니다. (내 기준으로는 models)와 같은 느낌..?)
엔티티는 데이터베이스에서 테이블로 표시할 수 있습니다.
각 엔티티에는 특성을 설명하는 필드가 있고 열에 해당됩니다. 테이블에 저장된 모든 항목에는 해당 필드가 포함됩니다.
행렬에서의 행이라고 볼 수 있습니다. 하나의 레코드(행)은 테이블에 저장된 항목입니다.
구조화된 데이터는 하나의 테이블로 표현할 수 있습니다.
테이블과 테이블 사이의 관계는
하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우입니다.
(1:1 관계는 일반적으로 자주 사용하지 않습니다.)
하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우입니다.
여러 명의 유저가 하나의 전화번호를 가질 수 없지만 한 명의 유저가 여러개의 전화번호를 가질 수 있습니다.
1:N 관계는 관계형 데이터베이스에서 가장 많이 사용됩니다.
여러 개의 레코드가 여러 개의 레코드와 관계가 있는 경우 입니다. 스키마를 디자인 할 때 join 테이블을 만들어 관리합니다. 1:N관계와 비슷하지만, 양방향에서 다수의 레코드를 가질 수 있습니다.
ex) 고객 한 명은 여러 여행 상품을 구매할 수 있고, 여행 상품 하나는 여러 명의 고객이 구매할 수 있습니다.
N:N 관계를 위해서는 테이블을 조인합니다.
Customer 테이블과 Package 테이블을 customer_package로 조인해 묶어줍니다.
SELECT * FROM customers;
GROUP BY State;
customer내 쿼리를 state만 묶어서 표현할 수 있습니다.
SELECT CustomerId, AVG(Total) FROM invoices GROUP BY CustomerId HAVING AVG(Total) > 6.00;
invoices 테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과만 조회합니다.
SELECT State, COUNT(*) FROM customers;
GROUP BY State;
customers 테이블의 State에 해당하는 레코드 개수를 확인 할 수 있습니다.
SELECT InvoiceId, SUM(UnitPrice) FROM invoice_items GROUP BY InvoiceId;
invoice_items 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구합니다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId