728x90
반응형
다 대 다 관계(many-to-many relation)
: 多 대 多 관계는 Association Entity - 교차 엔티티를 생성하여, 해소한다
* 논리에서는 entity / 물리에서는 table이라고 주로 부른다.
> 고객과 상품은 다 대 다 관계이다
ex) 아이유 고객은 0 or 1 or 다수의 상품을 가질 수 있다
갤럭시노트라는 상품은 0 or 1 or 다수 회원에게 판매 될 수 있다
이 경우 교차엔티티==교차릴레이션==Association Entity 를 적용해
고객과 상품의 일반정보 외의
고객과 상품의 교차(연관)정보를 저장하는 테이블(=교차 엔티티)을 별도로 만든다
고객일반정보 ----0|< 판매관계정보 >|0---- 상품일반정보 |
위의 설계에서 특징적인 부분은
판매연관정보는 ①고객아이디를 참조(FK 외래키)하고, ②상품코드를 참조(FK 외래키 )한다.
SQL
-- 회원테이블 생성
create table erd_customer(
c_id varchar2(100) primary key,
name varchar2(100) not null,
reg_date date not null
)
// 정보 입력
insert into ERD_CUSTOMER values('king','적재',sysdate);
-- 상품테이블 생성
create table erd_product(
p_code number primary key,
name varchar2(100) not null,
maker varchar2(100),
price number default 0
)
//상품 추가
insert into ERD_PRODUCT values(1,'이백냥라면','삼양',200)
-- 판매(교차 연관 정보) 테이블 생성
create table sale(
s_no number primary key,
c_id varchar2(100) not null,
p_code number not null,
number_sales number not null,
date_sales date not null,
constraint fk_erdcustomer foreign key(c_id) references erd_customer(c_id),
constraint fk_erdproduct foreign key(p_code) references erd_product(p_code)
)
-- 오류가 나는 경우
-- 참조 무결성 위배
--insert into sale values(1,'queen',1,10,sysdate);
-- 참조 무결성 위배
--insert into sale values(1,'king',2,10,sysdate);
-- insert success
insert into sale values(1,'king',1,10,sysdate);
-- 개체 무결성 위배
--insert into sale values(1,'king',1,10,sysdate);
-- 고객명 , 상품명 , 단가 , 판매수량, 총액 조회
SELECT c.name,p.name,s.number_sales,(p.price*s.number_sales) as 총액
FROM erd_customer c, erd_product p, sale s
WHERE c.c_id=s.c_id AND p.p_code=s.p_code;
-- 결과
728x90
반응형
'DB > 이론 및 개념' 카테고리의 다른 글
#02. RDMS 관계형 데이터(구조, 키의 종류), 관계대수(관계대수 연산) (0) | 2024.04.25 |
---|---|
#01. 데이터베이스 개념 및 데이터베이스 시스템 (+DBMS) (0) | 2023.08.09 |
[DB] DataBase Normalization 데이터베이스 정규화, 복합기본키 (2) | 2020.09.23 |
[DB] 13. 기본 SQL 8 - date 타입 (sysdate 키워드) (0) | 2020.09.04 |
[day_07] DB / 12. 기본 SQL 7 - JOIN 조인 (inner join, outer join, cross join, self join) (2) | 2020.08.13 |