-- SQL DDL
-- 춘대학시스템
✅답안과 비교하여 스스로 SLQ 구문 개선점 짚어보기 완료(2022.01.27)
DDL 1. ✅
-- 1. 계열 정보를 저장할 카테고리 테이블 생성
CREATE TABLE TB_CATEGORY (
NAME VARCHAR2(10)
, USE_YN CHAR(1) DEFAULT 'Y'
);
DDL 2. ✅
-- 2. 과목 구분을 저장할 테이블 생성
CREATE TABLE TB_CLASS_TYPE (
NO VARCHAR2(5) PRIMARY KEY
, NAME VARCHAR2(10)
);
DDL 3. ✅
지문에 주어진 PRIMARY KEY 없다. 따라서 KEY 이름 생성하지 않아도 무방하다.
-- 3. TB_CATEGORY 테이블의 NAME 컬럼에 PRIMARY KEY 생성
ALTER TABLE TB_CATEGORY
ADD CONSTRAINT PK_NAME PRIMARY KEY (NAME);
DDL 4. ✅
-- 4. TB_CLASS_TYPE 테이블의 NAME 컬럼에 NULL 값이 들어가지 않도록 속성 변경
ALTER TABLE TB_CLASS_TYPE
MODIFY NAME CONSTRAINT NN_NAME NOT NULL;
DDL 5. ❎✅
지문에 주어진 조건을 잘 따져보자. NAME 컬럼은 두 테이블에서 모두 변경이 필요하다.
-- 5. 두 테이블에서 컬럼명이 NO인 것은 기존 타입을 유지하면서 크기는 10으로,
-- 컬럼명이 NAME인 것은 마찬가지로 기존 타입을 유지하면서 크기는 20으로 변경
ALTER TABLE TB_CLASS_TYPE
MODIFY NO VARCHAR2(10)
MODIFY NAME VARCHAR2(20);
ALTER TABLE TB_CATEGORY
MODIFY NAME VARCHAR2(20);
DDL 6. ✅
-- 6. 두 테이블의 NO 컬럼과 NAME 컬럼의 이름을 각각 TB_를 제외한 테이블 이름이 앞에 붙은 형태로 변경
-- 예) CATEGORY_NAME
ALTER TABLE TB_CATEGORY
RENAME COLUMN NAME TO CATEGORY_NAME;
ALTER TABLE TB_CLASS_TYPE
RENAME COLUMN NO TO CLASS_TYPE_NO;
ALTER TABLE TB_CLASS_TYPE
RENAME COLUMN NAME TO CLASS_TYPE_NAME;
DDL 7. ❎✅
PK_컬럼이름으로 반영한다.
-- 7. TB_CATEGORY 테이블과 TB_CLASS_TYPE 테이블의 PRIMARY KEY 이름을 변경
-- PRIMARY KEY 이름은 "PK_ + 컬럼이름"으로 지정한다. 예) PK_CATEGORY_NAME
ALTER TABLE TB_CATEGORY
RENAME CONSTRAINT PK_NAME TO PK_CATEGORY_NAME;
ALTER TABLE TB_CLASS_TYPE
RENAME CONSTRAINT SYS_C008955 TO PK_CLASS_TYPE_NO;
DDL 8. ✅
-- 8. 다음과 같은 INSERT문 수행
INSERT INTO TB_CATEGORY VALUES ('공학','Y');
INSERT INTO TB_CATEGORY VALUES ('자연과학','Y');
INSERT INTO TB_CATEGORY VALUES ('의학','Y');
INSERT INTO TB_CATEGORY VALUES ('예체능','Y');
INSERT INTO TB_CATEGORY VALUES ('인문사회','Y');
COMMIT;
DDL 9. ❎✅
부모 KEY, 자식 KEY를 구분하여 사용하자.
FOREIGN KEY(자식컬럼) REFERENCES 부모테이블 (PK일때생략가능한부모컬럼);
-- 9. TB_DEPARTMENT의 CATEGORY 컬럼이
-- TB_CATEGORY 테이블의 CATEGORY_NAME 컬럼을 부모값으로 참조하도록 FOREIGN KEY 지정
-- 이때 KEY 이름은 FK_테이블이름_컬럼이름
ALTER TABLE TB_DEPARTMENT
ADD CONSTRAINT FK_DEPARTMENT_CATEGORY FOREIGN KEY (CATEGORY) REFERENCES TB_CATEGORY;
'Database' 카테고리의 다른 글
[Oracle/SQL] 11. 시퀀스 | SEQUENCE | CURRVAL | NEXTVAL (0) | 2022.01.27 |
---|---|
[Oracle/SQL] 10. VIEW | 인라인뷰 | DDL 활용한 베이스테이블 조작 (0) | 2022.01.27 |
[Oracle/SQL] 9. DDL | ALTER | DROP (0) | 2022.01.25 |
[Oracle/SQL] 8. TCL | 트랜잭션 | COMMIT | ROLLBACK | SAVEPOINT (0) | 2022.01.25 |
[Oracle/SQL] 7. DML | INSERT | UPDATE | DELETE | MERGE (0) | 2022.01.25 |