본문 바로가기

Programming/DB

DB 테이블 설계

DB 설계

ER Diagram of open market database

table 을 추가하기 전에는 다음과 같이 반드시 drop 명령어를 써서 기존의 중복되는 이름을 가지는 테이블을 삭제해 주어야 한다.

 DROP TABLE account cascade constraint;
 DROP TABLE item cascade constraint;
 DROP TABLE service cascade constraint;
 DROP TABLE customer cascade constraint;
 DROP TABLE branch cascade constraint;

servece table 생성

참조되는 테이블을 반드시 먼저 생성해 주어야한다.

  create table service(
  s_date date not null,
  s_join varchar2(3) not null,
  constraint service_pk primary key(s_date,s_join));

마지막줄을 만약, s_date primary key, s_join varchar2(3) primary key 로 하면 다음과 같은 오류가 뜬다.
ORA-02260: 테이블에는 하나의 기본 키만 가질 수 있습니다. => 실제로 우리가 원하는 것은 primary key 가 두개 인 것//이 아니라, 두개의 컬럼을 하나의 primary key 로 사용하는 것이며.(이것만 가능) 이 명령어가 바로
constraint service_pk primary key(s_date,s_join)); 인 것이다!*****
그래서 이 primary key 를 fk 로 참조 할 때도 아래 customer table 에서 주석처리 된것처럼 하면 안되고,
constraint ac_dajo_fk foreign key(c_s_date,c_s_join) references service(s_date,s_join)); 이렇게
해야한다.



customer table 생성

create table customer(
c_no decimal(7) not null,
c_name varchar2(5) not null,
c_addr varchar2(20) not null,
c_phone varchar2(16) not null,
c_email varchar2(15),
c_s_date date not null,
c_s_join varchar2(3) not null,
constraint ac_no_pk primary key(c_no),
constraint ac_dajo_fk foreign key(c_s_date,c_s_join) references service(s_date,s_join));
-- constraint ac_da_fk foreign key(c_s_date) references service(s_date),
-- constraint ac_jo_fk foreign key(c_s_join) references service(s_join));



product table 생성

create table product(
p_no decimal(7) not null,
p_date date not null,
p_left varchar2(5) not null,
p_comp varchar2(10) not null,
p_s_date date not null,
p_s_join varchar2(3) not null,
constraint ac_no_pk1 primary key(p_no,p_date),
constraint ac_dajo_fk1 foreign key(p_s_date,p_s_join) references service(s_date,s_join));
-- constraint ac_da_fk1 foreign key(p_s_date) references service(s_date),
-- constraint ac_jo_fk1 foreign key(p_s_join) references service(s_join));



delivery table 생성

create table delivery(
d_no decimal(7) not null,
d_name varchar2(10) not null,
constraint ac_noname_pk2 primary key(d_no,d_name));
-- constraint ac_no_pk2 primary key(d_no),
-- constraint ac_name_pk2 primary key(d_name));



buying table 생성

create table buying(
b_c_no decimal(7) not null,
b_p_no decimal(7) not null,
b_p_date date not null,
constraint ac_buy_pk primary key(b_c_no,b_p_no,b_p_date),
constraint ac_cno_fk3 foreign key(b_c_no) references customer(c_no),
constraint ac_pnodate_fk3 foreign key(b_p_no,b_p_date) references product(p_no,p_date));
-- constraint ac_pno_fk3 foreign key(b_p_no) references product(p_no),
-- constraint ac_pdate_fk3 foreign key(b_p_date) references product(p_date));



whodeliver table 생성

create table whodeliver(
w_d_no decimal(7) not null,
w_d_name varchar2(10) not null,
w_p_no decimal(7) not null,
w_p_date date not null,
constraint ac_whodeliv_pk4 primary key(w_d_no,w_d_name,w_p_no,w_p_date),
constraint ac_don_fk4 foreign key(w_d_no,w_d_name) references delivery(d_no,d_name),
constraint ac_pno_fk4 foreign key(w_p_no,w_p_date) references product(p_no,p_date));

'Programming > DB' 카테고리의 다른 글

[SNS프로젝트 회고]RDBMS vs NOSQL  (0) 2020.04.29