엔티티는 저장되고 관리되어야 할 데이터로 (날짜나 종목코드등과 같은 식별자 정보)
일별 거래가를 검색할 때 기업 이름을 함께 표시하려면 어떻게 해야 할까?
테이블이 분리된 상황이므로 테이블의 데이터를 조합해야 할 것
*데이터는 중복 저장 하지 않는다 : 저장할 공간이 더 필요한 문제, 중복 저자한 열 데이터를 수정할 경우 해당 열을 가진 테이블의 데이터를 모두 찾아 수정해야 하는 문제
데이터 중복을 최소화하는 설계는 피할 수 없으며 조인을 사용해 2개 이상의 테이블을 조합한 결과를 검색하는 방식이 효율적
data modeling이란 주어진 상황에서 논리 데이터 모델을 구성하는 작업을 말한다.
데이터 모델링이 끝나면 논리 데이터 모델을 물리 데이터 모델로 바꾼 다음 실제 데이터베이스에 반영하는 작업을 함
정규화는 논리 데이터 모델의 중복을 제거해 일관성 있고 안정적인 자료구조를 만드는 단계임
일반적으로 3차 정규화를 많이 사용
- 데이터 모델이 적절한 일관성을 유지 하면서도 중복이 없는 노리 데이터 모델을 구성하는 것을 말한다
가장 많이 사용하는 조인
조인키에 해당하는 각 테이블의 열값을 비교해 조건에 맞는 값을 검색
SELECT [열 이름]
FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
WHERE [검색조건]
INNER JOIN VENN DIAGRAM
왼쪽은 고객 테이블 | 오른쪽은 주문 테이블
고객의 주문 내열을 모두 확인 하려면?
고객 테이블과 주문 테이블을 조인 하되 고객 번호를 조인 조건으로 삼아야 한다
INNER JOIN문을 적용한 쿼리
SELECT
[고객.고객 번호], [고객], [고객 이름], [주문.주문 번호], [주문.고객 번호], [주문.주문 날짜]
FROM [고객]
INNER JOIN [주문] ON [고객.고객 번호] = [주문.고객 번호]
SELECT
a.symbol,
a.company_name,
a.ipo_year,
a.sector,
a.industry,
b.date,
b.[open],
b.[high],
b.[low],
b.[close],
b.adj_close,
b.volume
FROM nasdaq_company AS a
INNER JOIN stock AS b on a.symbol = b.symbol
WHERE a.symbol = 'MSFT'
AND b.date >= '2021-10-01'
AND b.date < '2021-11-01'
SELECT
symbol <<== 얘가 누군지 모름
FROM nasdaq_company AS a
INNER JOIN stock AS b ON a.symbol = b=symbol
WHERE a.symbol = 'MSFT'
AND b.date >= '2021-10-01'
SELECT
a.symbol,
a.last_crawel_date,
b.date
FROM nasdaq_company AS a
INNER JOIN stock AS b on a.symbol = b.symbol AND a.last_crawel_date = b.date
WHERE a.symbol = 'MSFT'