요구사항 분석설계 주요 개념
분석설계의 주요내용
개체(명확, 단어), 속성(개체의 성질), 관계
설계의 3단계
개논물.
개념설계(개체 간 관계),
논리설계(개체의 성질, 제약사항설정, 정규화),
물리설계(속성의 자료형, 크기, 물리적인 약속)
데이터베이스의 개념
공유, 통합, 저장, 운영
개체는 데이터베이스로 넘어가면서 테이블로 불린다
테이블의 가로 영역은 행, 레코드, 튜플, 로우
세로 영역은 열, 속성, 어트리뷰트, 필드, 컬럼
트랜젝션
데이터베이스가 수정(변경)을 하기위해 수행되어야 할 논리적 단위
여러개의 SQL로 구성
특징 - 원 일 고 지 *원자성 all of nothing
( 자 관 립 속 ) *일관성 한방향으로만
키의 종류
후보키, 기본키(PK), 대체키, 복합키
외래키(FK)
SQL 구조화된 질의 언어
DDL 정의 - create, alter, drop
DML - insert, update, delete, select
DCL 조작 - grant, alter
TCL 트랜젝션 - commit, rollback, savepoint
alter - 컬럼 옵션
add 추가
modify 수정
drop 삭제
rename 이름변경
데이터베이스 구현 개념
테이블(TableName) 개체의 속성에 값 넣기
alter table TableName
add(
컬럼명 자료형(크기 값) N/N 여부
) //CTRL + ENTER
테이블(TableName) 개체의 속성에 값 넣기
ALTER TABLE TableName
ADD(
CONSTRAINT [고유한 유일한 이름 작명] FOREIGN KEY(자식 키 이름)
REFERENCES[부모 테이블명](부모 키 이름);
특정 키 찾기
select * from USER_CONSTRIANS;
//시스템에서 제공하는 미리 선언한 테이블 명
//사용자가 선언한 제약사항을 검색해서 보여줌
데이터베이스 구현
CREATE TABLE LPROD --상품분류 테이블
(
LPROD_ID NUMBER(5) NOT NULL, --순
LPROD_GU CHAR(4) NOT NULL, --상품분류코드
LPROD_NM VARCHAR(40) NOT NULL, --상품분류명
CONSTRAINT PK_LPROD PRIMARY KEY(LPROD_GU) --식별영역(key)
);
SELECT * FROM LPROD;
CREATE TABLE BUYER --거래정보 테이블
(
BUYER_ID CHAR(6) NOT NULL, --거래코드
--//키 정의(제약사항) 추가하기 1) BUYER_ID CHAR(6) NOT NULL + "PRIMARY KEY" 추가
-- 하지만 이미 테이블을 create한 이후엔 불가능
BUYER_NAME VARCHAR2(40) NOT NULL, --거래처명
BUYER_LGU CHAR(4) NOT NULL, --취급상품대분류
BUYER_BANK VARCHAR2(60), --은행
BUYER_BANKNO VARCHAR2(60), --계좌번호
BUYER_BANKNAME VARCHAR2(15), --예금주
BUYER_ZIP CHAR(7), --우편번호
BUYER_ADD1 VARCHAR2(100), --주소1
BUYER_ADD2 VARCHAR2(70), --주소2
BUYER_COMTEL VARCHAR2(14) NOT NULL, --전화번호
BUYER_FAX VARCHAR2(20) NOT NULL --FAX번호
----//키 정의(제약사항) 추가하기 2) CONSTRAINT PK_BUYER_ID PRIMARY KEY(BUYER_ID) --식별영역(key) //키 정의 추가하기 + PRIMARY KEY
-- 하지만 이미 테이블을 create한 이후엔 불가능
-- 그런데 BUYER_ID가 무엇인지 궁금할 수 있다. EX)반장오세요 VS 홍길동 반장 오세요
-- 기본키는 테이블마다 다 있으니까 중복될 수 있다. 그래서 별도의 명칭을 정의
-- => (개체 이름)PK_BUYER_ID 하나의 계정 안에서 중복되면 안된다.
----//키 정의(제약사항) 추가하기 3)
-- sql dev 툴 내에서
-- 테이블 우클릭 > 편집> 제약조건 추가
);
SELECT * FROM LPROD;
----//키 정의(제약사항) 추가하기 4)
ALTER TABLE BUYER
ADD(
CONSTRAINT PK_BUYER PRIMARY KEY(BUYER_ID)
);
/* ALTER TABLE BUYER
ADD : 컬럼 및 제약사항 추가 가능
MODIFY : 컬럼 수정
DROP : 컬럼 삭제
RENAME : 컬럼명 변경
*/
DESC BUYER; --BUYER 테이블 구조확인
--6월 5일
--테이블구조변경(컬럼추가)
ALTER TABLE BUYER
ADD(
BUYER_MAIL VARCHAR2(60) NOT NULL,
BUYER_CHARGER VARCHAR2(20) ,
BUYER_TELEXT VARCHAR2(2)
);
--테이블 구조 변경(컬럼변경)
ALTER TABLE BUYER
MODIFY(
BUYER_NAME VARCHAR2(60) -- 오라클은 NOT NULL 가 기본 디폴트라 별도 선언을 안해준다
);
ALTER TABLE BUYER
ADD(
CONSTRAINT FR_LPLOG_BUYER FOREIGN KEY(BUYER_LGU) --사용자가 FR_LPLOG_BUYER 테이블에 정의한 이름
REFERENCES LPROD(LPROD_GU)
);
--외래키 제약사항 확인 1)
-- 해당 테이블 오른쪽 마우스, 편집, 제약사항
--외래키 제약사항 확인 2)
SELECT * FROM USER_CONSTRAINTS; --시스템에서 제공하는 미리 선언한 테이블 명
-- BUYER_TELEXT 컬럼에 입력할 데이터는 오직 두자리 숫자만 가능하도록 CHECK 제약사항을 추가
ALTER TABLE BUYER
ADD CONSTRAINT CHECK_PHONE
CHECK(REGEXP_LIKE(BUYER_TELEXT, '[0-9][0-9]'));
--SELECT 검색속도를 빠르게 하기 위해 인덱스 추가
CREATE INDEX IDX_BUYER -- 엔티티는 아니지만 개체라고 함, 보통 개체 안에 '객체'로 인식.
ON BUYER(BUYER_NAME, BUYER_ID);
-- 활용 예
-- SELECT *
-- FROM BUYER
-- WHERE BUYER_NAME = '농심';
--인덱스 삭제
-- DROP INDEX IDX_BUYER;
--상품정보 테이블 생성
CREATE TABLE PROD
(
PROD_ID VARCHAR2(10) NOT NULL,
PROD_NAME VARCHAR2(40) NOT NULL,
PROD_LGU CHAR(4) NOT NULL,
PROD_BUYER CHAR(6) NOT NULL,
PROD_COST CHAR(10) NOT NULL,
PROD_PRICE NUMBER(10) NOT NULL,
PROD_SALE NUMBER(10) NOT NULL,
PROD_OUTLINE VARCHAR2(100) NOT NULL,
PROD_DETAIL CLOB,
PROD_IMG VARCHAR2(40) NOT NULL,
PROD_TOTALSTOCK NUMBER(10) NOT NULL,
PROD_INDATE DATE,
PROD_PROPERSTOCK NUMBER(10) NOT NULL,
PROD_SIZE VARCHAR2(10),
PROD_COLOR VARCHAR2(100),
PROD_DELIVERY VARCHAR2(255),
PROD_UNIT VARCHAR2(6),
PROD_QTYSALE NUMBER(10),
PROD_MILEAGE NUMBER(10),
CONSTRAINT PK_PROD PRIMARY KEY(PROD_ID),
CONSTRAINT FR_PROD_LPROD FOREIGN KEY(PROD_LGU)
REFERENCES LPROD(LPROD_GU),
CONSTRAINT FR_PROD_BUYER FOREIGN KEY(PROD_BUYER)
REFERENCES BUYER(BUYER_ID)
);
--입고상품정보 테이블 생성
CREATE TABLE BUYPROD
(
BUY_DATE DATE NOT NULL,
BUY_PROD VARCHAR2(10) NOT NULL,
BUY_QTY NUMBER(10) NOT NULL,
BUY_COST NUMBER(10) NOT NULL,
CONSTRAINT PK_BUYPROD PRIMARY KEY(BUY_DATE, BUY_PROD),
CONSTRAINT FR_BUYPROD_FROID FOREIGN KEY(BUY_PROD) REFERENCES PROD(PROD_ID)
);
--회원 정보테이블 생성
CREATE TABLE MEMBER
(
MEM_ID VARCHAR2(15) NOT NULL,
MEM_PASS VARCHAR2(15) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
MEM_REGNO1 CHAR(6) NOT NULL,
MEM_REGNO2 CHAR(7) NOT NULL,
MEM_BIR DATE,
MEM_ZIP CHAR(7) NOT NULL,
MEM_ADD1 VARCHAR2(100) NOT NULL,
MEM_ADD2 VARCHAR2(80) NOT NULL,
MEM_HOMETEL VARCHAR2(14) NOT NULL,
MEM_COMTEL VARCHAR2(14) NOT NULL,
MEM_HP VARCHAR2(15) NOT NULL,
MEM_MAIL VARCHAR2(60) NOT NULL,
MEM_JOB VARCHAR2(40) NOT NULL,
MEM_LIKE VARCHAR2(40) NOT NULL,
MEM_MEMORIAL VARCHAR2(40) NOT NULL,
MEM_MEMORIALDAY DATE,
MEM_MILEAGE NUMBER(10) NOT NULL,
MEM_DELETE VARCHAR2(1) NOT NULL,
CONSTRAINT PK_MEMBER PRIMARY KEY (MEM_ID)
);
--장바구니 정보테이블 생성
CREATE TABLE CART
(
CART_MEMBER VARCHAR2(15) NOT NULL,
CART_NO CHAR(13) NOT NULL,
CART_PROD VARCHAR2(10) NOT NULL,
CART_QTY NUMBER(8) NOT NULL,
CONSTRAINT PK_CART PRIMARY KEY(CART_NO, CART_PROD),
CONSTRAINT FR_CART_MEMBER FOREIGN KEY(CART_MEMBER)
REFERENCES MEMBER(MEM_ID),
CONSTRAINT FR_CART_PROD FOREIGN KEY(CART_PROD)
REFERENCES PROD(PROD_ID)
);
--우편번호 정보테이블
CREATE TABLE ZIPTB
(
ZIPCODE CHAR(7) NOT NULL,
SIDO VARCHAR2(2 CHAR) NOT NULL,
GUGUN VARCHAR2(10 CHAR) NOT NULL,
DONG VARCHAR2(30 CHAR) NOT NULL,
BUNJI VARCHAR2(10 CHAR),
SEQ NUMBER(5) NOT NULL
);
CREATE INDEX IDX_ZIPTB_ZIPCODE ON ZIPTB(ZIPCODE);
-- 여기까지DDL
-- 여기서부터 -> DML 블록지정 후 ctrl enter
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (1, 'P101','컴퓨터 제품');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (2, 'P102','전자제품');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (3, 'P201','여성캐쥬얼');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (4, 'P202','남성캐쥬얼');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (5, 'P301','피혁잡화');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (6, 'P302','화장품');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (7, 'P401','음반/CD');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (8, 'P402','도서');
insert into LPROD (LPROD_ID, LPROD_GU, LPROD_NM) values (9, 'P403','문구류');
rollback;
select * from lprod; --아직 커믹 전이기 때문에, 하드디스크가 아닌, 메모리에 저장됨
--F11 = 커밋 = 하드디스크에 저장
commit;
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
6일차) 4장 연습문제 20180606_am 1차시도 (0) | 2018.06.06 |
---|---|
6일차) for문 while문 개념 및 예제 20180605_am (0) | 2018.06.05 |
5일차) SQL 질의어, 그 중 트랜젝션에 대해 알아보자 20180604pm (0) | 2018.06.04 |
5일차) 관계형 데이터모델에서 키 key 에 대해 알아본다 20180601pm (0) | 2018.06.02 |
4일차) 관계형 데이터베이스 구성 예 20180530 pm (0) | 2018.06.02 |
댓글