본문 바로가기
DB/이론 및 개념

[DB] ERD / 다대다 관계 (many-to-many relation) - 교차 엔티티 Association Entity

by 파프리카_ 2020. 10. 12.
728x90
반응형

 다 대 다 관계(many-to-many relation)

: 多 대 多 관계는 Association Entity - 교차 엔티티를 생성하여, 해소한다 

* 논리에서는 entity / 물리에서는 table이라고 주로 부른다.

 

>   고객과 상품은 다 대 다 관계이다 
ex)  아이유 고객은 0 or 1 or 다수의 상품을 가질 수 있다 
        갤럭시노트라는 상품은 0 or 1 or 다수 회원에게 판매 될 수 있다 

이 경우 교차엔티티==교차릴레이션==Association Entity 를 적용해 
고객과 상품의 일반정보 외의
고객과 상품의 교차(연관)정보를 저장하는 테이블(=교차 엔티티)을 별도로 만든다  

 

  고객일반정보    ----0|<  판매관계정보  >|0---- 상품일반정보   

ERD 설계

 위의 설계에서 특징적인 부분은 
 판매연관정보고객아이디를 참조(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
반응형