쿠키(일종의 쿠폰):
1. 생성: Cookie c = new Cookie("",""); small amount of information
2. 저장: resopnse.addCookie(V); 브라우저에 저장되기 때문에 add를 씀
3. 사용: Cookie[] cs = reqeust.getCookies();- 실질적으로 쿠키를 사용
1,2은 같이 사용된다. 3은 사용할때
DB 정규화
db 정규화(Normalization)
정규화란?
한마디로 DB서버의 메모리를 낭비하지 않기 위해서
어떤 테이블을 식별자를 가지는 여러개의 테이블로
나누는 과정을 정규화라 한다
정규화된 데이타베이스는 중복이 최소화되도록 설계된 데이타베이스이다
장단점
장점 1. 메모리를 절약할수 있다
2. 구조화된 시스템으로 인해서 관리가 편하다
단점 조회비율이 매누 높은 시스템의 경우에는 테이블간의
join 연산이 반복적으로 이뤄지기 때문에 질의 응답 속도가
살짝 늦어질수 있다
-------------------------------------------------------------------
-------------------------------------------------------------------
회사,직원 테이블 : companysawon
회사명 : company 문자열(10)
회사주소 : address 문자열(20)
회사전화 : phone 문자열(15)
직원명 : sawon_name 문자열(10)
직급 : position 문자열(10)
이메일 : email 문자열(20)
휴대폰 : hp 문자열(20)
//MySQL
create table companysawon (company varchar(20),address varchar(50),
phone varchar(35),sawon_name varchar(30),position varchar(30),
email varchar(50),hp varchar(20));
<<정규화 적용하기전 테이블>>
INSERT INTO companysawon (company, address, phone, sawon_name, position, email, hp) VALUES ('LG', '서울 강남구', '023-123-1234','강호동','부장','aaa@namver.com', '010-111-1111');
INSERT INTO companysawon (company, address, phone, sawon_name, position, email, hp) VALUES ('KT', '경기도 분당', '023-123-1234','이수근','부장','bbb@namver.com', '010-222-2222');
INSERT INTO companysawon (company, address, phone, sawon_name, position, email, hp) VALUES ('SK', '부산 해운대', '023-123-1234','','이영자','ccc@namver.com', '010-333-3333');
->어떤 문자게 있을까요?
1) 거래처 회사에 대한 정보나 거래처 직원이 추가될때마다 불필요한 데이터를 계속 업데이트 해야한다.
2) 1로 인한 작업으로 메모리 낭비가 심해진다.
3) 회사가 이전을 하거나 하는 것 같이, 특정정보가 변경될때에도 많은 데이터가 수정되어야한다.
<<정규화 적용한 후 테이블>>
회사테이블 : company
------------------------------
회사아이디 : company_id number(5) : 기본키(primary key)
회사명 : company 문자열(10)
회사주소 : address 문자열(20)
회사전화 : phone 문자열(15)
//MySQL
create table company (company_id int primary key,
company varchar(20),address varchar(50),phone varchar(35));
insert into company values(10, 'LG', '서울 강남', '02-111-222');
insert into company values(20, 'KT', '경기도 성남', '031-111-222');
거래처 직원 테이블 : sawon
------------------------------
직원명 : sawon_name 문자열(10)
직급 : position 문자열(10)
이메일 : email 문자열(20)
휴대폰 : hp 문자열(20)
회사아이디 : company_id number(5) :외부키(foreign key)
CREATE TABLE `mymodeling`.`sawon` (
`company_id` INT(10) NULL,
`sawon_name` VARCHAR(45) NULL,
`position` VARCHAR(45) NULL,
`email` VARCHAR(45) NULL,
`hp` VARCHAR(30) NULL,
foreign key(company_id)references company(company_id));
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (10, '피준범','과장','junbumpi@ssafy@com','010-2345-1122');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (10, '이새봄','대리','bom@ssafy@com','010-4329-3355');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (30, '김아름','대리','beauty@ssafy@com','010-9901-8232');
select *from sawon;
데이타 추가
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (10, '피준범','과장','junbumpi@ssafy@com','010-2345-1122');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (10, '이새봄','대리','bom@ssafy@com','010-4329-3355');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (30, '김아름','대리','beauty@ssafy@com','010-9901-8232');
--> 1) 피준범 과장을 삭제...
2) 10번 회사가 코로나 19로 문을 닫았을때 자식을 가지는 부모테이블은 삭제가 안됩니다.
==> on delete cascade옵션을 지정
delete from sawon where sawon_name='피준범';
drop table sawon;
CREATE TABLE `mymodeling`.`sawon` (
`company_id` INT(10) NULL,
`sawon_name` VARCHAR(45) NULL,
`position` VARCHAR(45) NULL,
`email` VARCHAR(45) NULL,
`hp` VARCHAR(30) NULL,
foreign key(company_id)references company(company_id)
on delete cascade);
desc sawon;
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (10, '피준범','과장','junbumpi@ssafy@com','010-2345-1122');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (20, '이새봄','대리','bom@ssafy@com','010-4329-3355');
INSERT INTO sawon (company_id, sawon_name, position,email,hp)VALUES (30, '김아름','대리','beauty@ssafy@com','010-9901-8232');
delete from company where company_id=10;
select*from company;
select*from sawon;
-----------------------------------------------------
상품에 대한 테이블 : shop
상품번호 num number(5),
상품명 sangpum 문자열(20),
색상 color 문자열(10),
단가 price number(10),
입고일 ipgoday 날짜타입
고객에 대한 테이블 : client
고유번호 num number(5),
이름 name 문자열(10)
나이 age number(5),
주소 address 문자열(20)
--------------------------------------------------------------------
shop과 client는 다대다 관계입니다.
이것은 assotication entity를 가집니다. 이것이 cart입니다.
shop과 client는 cart가지므로 cart는 양쪽의 pk를 foreinKey로 가집니다.
그렇기 때문에 shop, client는 on delete cascade 속성을 꼭 넣어 줍니다.
장바구니 테이블 만들기
테이블명 : cart
상품정보 shop_num number(5) not null,
고객정보 client_num number(5) not null,
구입날짜 guipday date,
갯수 cnt number(5) not null,
현재컬럼명,참조 ,제약조건명
외부키 shop_num->shop(num),fk_shop
client_num->client(num),fk_client
INSERT INTO cart VALUES(111, 01, '2020-06-17', 2); -- 이어폰을 강호동이 6월 17일에 2개 샀음 --
INSERT INTO cart VALUES(222, 02, '2020-06-17', 50);
delete from shop where num=111;
select*from cart;
INSERT INTO cart VALUES(111, 01, '2020-06-17', 2);
추가가 안됩니다.
---------------------------------------------------------------
join 사용해서 쿼리문 조회하기
고객명 상품명 색상 갯수 가격 총금액 나이 주소
select ci.name "고객명", s.sangpum "상품명", s.color "색상",
ca.cnt "갯수", s.price "가격", ca.cnt*s.price "총금액", ci.age "나이", ci.address "주소"
from client ci, shop s, cart ca
where ca.client_num=ci.num and ca.shop_num=s.num;
'컴퓨터 프로그래밍 > 수업' 카테고리의 다른 글
2020.06.19 (0) | 2020.06.19 |
---|---|
2020.06.15 (0) | 2020.06.15 |
2020.06.11 (0) | 2020.06.11 |
2020.06.10 (0) | 2020.06.10 |
2020.06.09 (0) | 2020.06.09 |