CODEDRAGON ㆍDevelopment/Database
무결성 제약 조건의 특성
· 제약조건은 데이터의 적정성과 무결성을 확보하기 위한 조건들을 의미한다.
· 모든 제약조건들은 데이터 사전(data dictionary)에 저장된다.
· 부적절한 데이터 입력방지를 위한 NOT NULL의 제약조건은 반드시 열(컬럼) 레벨에서만 정의가 가능하다.
· NOT NUll, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK 등이 대표적인 제약조건의 유형들이다.
https://codedragon.tistory.com/4272
기본키(Primary key)
· 기본키 제약조건은 일반적으로 테이블의 각 행을 고유하게 식별하는 값을 가진 열 또는 열 조합을 말한다. · 기본키 제약 조건에 포함되는 열에는 Null 값을 사용할 수 없다. · 기본키 제약 조건을 지정하면 데이터베이스는 해당 열에 대해 고유 인덱스를 만들어 데이터 고유성을 적용한다. · 쿼리에서 기본키 제약 조건을 사용한 열을 사용하는 경우 이 인덱스를 사용하여 빠르게 액세스할 수 있다. |
https://codedragon.tistory.com/4534
https://codedragon.tistory.com/8065
외래키(FOREIGN KEY)
· 외래키 제약조건은 두 테이블의 데이터 간 연결을 설정하고 강제 적용하는 데 사용되는 열을 말한다. · 외래키 테이블의 기본 키 값을 가지고 있는 열을 다른 테이블의 열이 참조할 때 두 테이블 간에 연결이 생성된다. 이때 두 번째 테이블에 추가되는 열은 이 제약 조건으로 생성된다. · 외래키 제약 조건을 지정하면 데이터베이스는 해당 열에 대해 고유 인덱스를 만들어 데이터 고유성을 적용한다. · 쿼리에서 이 제약 조건을 사용한 열을 사용하는 경우 이 인덱스를 사용하여 빠르게 액세스할 수 있다. |
https://codedragon.tistory.com/4540
QUERY 연습 1
오브젝트 조회, 테이블 조회, 컬럼 정보 조회 , 인덱스 조회, 뷰 조회 쿼리문 예시입니다.
조회 정보 |
예제 |
오브젝트 조회 |
SELECT object_name, object_type FROM user_objects; |
테이블 조회 |
SELECT table_name FROM user_tables; SELECT * FROM tab; |
컬럼 정보 조회 |
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable, data_default FROM user_tab_columns WHERE table_name = 'DEPT' ; |
인덱스 조회 |
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable, data_default FROM use_indexes WHERE table_name = 'DEPT' ; |
뷰 조회 |
SELECT text FROM user_views where view_name='EMP_vw'; |
https://codedragon.tistory.com/8067
QUERY 연습 2
1.아래의 조건에 맞는 테이블을 설계하고 데이터를 조작하여 테스트하는 쿼리문을 작성하시오
인사관리에 필요한 테이블(employees)을 생성하기
컬럼 |
조건 |
사원번호 empno |
PK |
사원명 empname |
Not Null |
성별 gender |
m 또는 w의 값만 허용 |
부서코드 deptno |
부서테이블과 관계 설정 |
메일주소 |
중복불허 |
휴대폰번호 phone |
중복불허 |
학력 school |
코드(학력테이블) |
주소 address |
- |
인사 기본테이블(employees) 구성된 테이블 생성
CREATE TABLE employees( empno NUMBER(4) PRIMARYKEY, empname VARCHAR2(10) NOT NULL, gender VARCHAR2(1) CONSTRAINT emp_gender_CK CHECK( gender IN('M', 'F') ), gender VARCHAR2(10) constraint check_gender check( gender IN('남성','여성') ), deptno VARCHAR2(10) NOT NULL FOREIGN KEY REFERENCES departments(deptno), email VARCHAR2(10) UNIQUE, phone NUMBER(4) UNIQUE, school VARCHAR2(10), address VARCHAR2(10) ); |
부서테이블(departments) 생성하기
컬럼 |
조건 |
부서코드 (deptno) |
PK |
부서명 (deptname) |
not Null |
지역 (region) |
- |
부서 전화번호 (depttel) |
- |
CREATE TABLE departments( deptno VARCHAR2(10) PRIMARYKEY, deptname VARCHAR2(10)NOT NULL, region VARCHAR2(10) depttel VARCHAR2(10) ); |
2. 두 테이블간의 관계도를 도식화하여 나타내시오
3. 인사기본테이블의 성별컬럼을 기준으로 B 트리 인덱스를 생성하려고 할 때 문제점을 설명하시오
사원정보 테이블에서 성별 컬럼의 데이터는 m과 w의 값만을 가질 수 있으며, 카디널리티가 낮은 컬럼을 대상으로 할 때는 bitmap 인덱스를 생성하는 것이 더 효율적이다. |
4. 사원번호와 사원명, 부서명, 메일주소, 휴대폰번호의 컬럼을 갖는 View(empl_view)를 생성하시오
CREATE OR REPLACE VIEW empl_view AS SELECT emp.사원명, dept.부서명, emp.메일주소, emp.휴대폰번호 FROM employees emp, department dept;
|
QUERY 연습 3
제약조건(Constraints)은 DB에서 데이터의 적정성과 무결성을 확보하기 위한 조건들을 의미합니다. 모든 제약조건들은 원본 데이터와 따로 데이터 사전(Data dictionary)에도 저장되며, 보통 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY< CHECK등이 대표적인 제약조건의 유형을 표시합니다.
ERD를 보고 Table을 생성하는 SQL 명령어 예시입니다.
테이블간의 관계(Relationship)
도서 테이블명: Book
컬럼명 |
제약조건 |
bookid |
기본키(PK) 숫자(2) |
bookname |
가변문자열(40) |
publisher |
가변문자열(40) |
price |
숫자(8) |
고객 테이블명: Customer
컬럼명 |
제약조건 |
custid |
기본키(PK) 숫자(2) |
name |
가변문자열(40) |
address |
가변문자열(50) |
phone |
숫자(8) |
주문 테이블명: Orders
컬럼명 |
제약조건 |
orderid |
기본키(PK) 숫자(2) |
custid |
외래키(FK) 숫자(2) |
bookid |
외래키(FK) 숫자(2) |
salesprice |
숫자(8) |
orderdate |
날짜 |
CREATE TABLE Book( bookid NUMBER(2) PRIMARY KEY, bookname VARCHAR2(40), publisher VARCHAR2(40), price NUMBER(2) )
CREATE TABLE Customer( custid NUMBER(2) PRIMARY KEY, name VARCHAR2(40), address VARCHAR2(50), phone VARCHAR2(20) )
CREATE TABLE Order( orderid NUMBER(2) PRIMARY KEY, custid NUMBER(2) REFERENCES Customer(custid), bookid NUMBER(2) REFERENCES Book(bookid), saleprice NUMBER(8), orderdate DATE ) |
'Development > Database' 카테고리의 다른 글
단계별 정규형과 제약 조건 (0) | 2019.12.07 |
---|---|
NoSQL 분류 (0) | 2019.12.03 |
DB & DBMS (0) | 2019.11.28 |
트랜잭션(Transcation) (0) | 2019.11.19 |
Sample database with test suite (0) | 2019.11.16 |