공부한 기록/데이터베이스 14

SQL 고급

SQL에서는 수학의 함수 개념을 사용한다. 특정 값이나 열의 값을 받아서 입력하여 계산한 결과를 보여준다. SQL에서 함수는 DBMS가 제공하는 내장함수 built-in function와 정의함수 user-defined function로 나뉜다. 여기서는 내장함수만을 다루도록 하겠다. 숫자 함수 -78과 +78의 절댓값을 구한다고 해보자. SQL로 구현한 코드는 다음과 같다. SELECT ABS(-78), ABS(+78) FROM Dual; 결과값은 78, 78이다. ※위의 dual 테이블은 함수계산을 위한 '가상의 테이블'이다. 다음은 round 함수를 사용한 코드를 보자. SELECT ROUND(4.875, 1) FROM Dual; 4.875의 소수 첫째 자리까지 반올림을 하는 코드다. 결과값으로 4..

정규화

이상현상 Anomaly 잘못된 설계를 바탕으로 건축된 건물은 무너질 수 있다. 데이터베이스도 그렇다. 데이터베이스를 잘못 설계한다면 SQL이 불가능하거나, 투플을 삭제할 때 다른 정보도 연쇄 삭제되는 삭제 이상(deletion anomly), 투플 삽입 시에 특정 속성에 해당하는 값이 없어 null값을 입력해야 하는 삽입이상(insertion anomaly), 투플 수정 시 중복된 데이터 일부만 수정되어 불일치가 일어나는 수정이상(update anomaly)이 있을 수 있다. 이런 이상현상은 정규화를 통해 해결할 수 있다. 다만 정규화를 다루기에 앞서 함수종속성에 대해 알아야 한다. 함수종속성 Functional Dependency 테이블의 각 속성 사이에는 의존성이 존재한다. 만약 속성 A의 값을 알면..

데이터 모델링

데이터 모델링 데이터베이스라는 집을 집어야 한다. 집은 만들자고 해서 바로 만들 수 있는 것이 아니다. 건축을 하기에 앞서 내부와 뼈대를 어떻게 할 것인지 세세한 계획을 세워야 한다. 이러한 계획을 '데이터 모델링'이라고 한다. 하나의 DB를 만들기 위해서는 1. 현실 세계의 정보를 기반으로 개념적 모델링을 하고 -> 2. 이를 논리적 모델로 만들고 나서 -> 3. 데이터베이스로 구현한다. 이렇게 구현한 데이터베이스를 운영 및 감시하면서 부족한 점을 보완하거나 개선해 간다. 이를 데이터베이스 생명주기(database life cycle)이라 한다. 개념적 모델링 Conceptual modeling 요구사항을 수집하고 분석한 결과를 토대로 전체적인 뼈대를 만드는 과정이다. 개체(entity)를 추출하고 각..

SQL (3)

데이터정의어 Data Definition language 데이터 생성과 제거, 변경에 관한 명령문이다. CREATE 문 속성이름과 데이터타입을 반드시 작성해야 한다. NOT NULL은 NULL값을 허용하지 않는 것이다. UNIQUE는 컬럼에서 무조건 다른 값을 가져야 한다는 의미이다. 기본키제약조건과 유사해보이지만 NULL값을 허용한다는 점에서 다르다. NULL값마저 거부하려면 NOT NULL을 지정해야 한다. DEFAULT는 값이 입력되지 않았을 때 사용하는 기본값. CHECK는 데이터 입력 조건을 붙이는 키워드. PRIMARY KEY는 기본키를 지정하는 키워드인데 위와 같이 따로 해도 되고, bookid NUMBER PRIMARY KEY 처럼 데이터 타입옆에 제시해도 된다. FOREIGN KEY는 외..

SQL 2

Where 조건 where은 테이블로부터 데이터값을 검색해 가져올 때 사용하는 '검색조건'이다. 뒤는 다음과 같이 표현할 수 있다. between - and -; - 에서 -사이. in (' ', ' '); -- 혹은 --. or로 치부된다. like ' '; 어떤 속성 값이 ' '인 것. 상기한 조건들은 와일드카드를 사용하여 더 넓은 조건을 추가할 수 있다. 물론 복합적인 조건도 표현가능하다. 조인 SELECT * FROM Customer, Orders; 이것은 단순 카티전이다. 고객이 5명, 주문이 10개면 5*10=50의 튜플이 생겨난다. SELECT * FROM Customer, Orders WHERE Customer.custid =Orders.custid; 허나 조인을 한다면 불필요한 중복을 피..

SQL 1

데이터 조작어 검색 각 사원(employees)의 성(last name), job code, 고용일(hire date), 사원번호(employee number)를 출력하라. 사원번호가 가장 앞에 나와야 한다. HIRE_DATE는 STARTDATE로 출력하라. 위의 문제가 있다고 가정해보자. 그럼 SQL문장은 다음과 같다. select EMPLOYEE_ID, LAST_NAME, JOB_ID, HIRE_DATE as startdate from employees; 속성부분은 대소문자를 구별하지 않으니 소문자로 작성해도 된다. as의 뒷부분을 스크립트에서 대문자로 보이게 하려면 큰따옴표를 붙여 쓰면 된다. as "START_DATE"처럼 말이다. 사원의 이름, 급여를 출력하라. 각 컬럼의 이름은 Employee..

관계대수

지난 관계대수를 이어서 하겠다. 프로텍션(Protection): '속성'을 추출하기 위한 단항 연산자, 수직적 부분집합이다.(참고로 셀렉션은 수평적 부분집합) π조건(테이블)로 표현함. 합집합(union): 두 릴레이션을 합해서 하나의 릴레이션으로 반환한다. R U S 로 표현. 교집합(intersection): '합병 가능한' 두 릴레이션을 대상으로, 공통적으로 가지고 있는 투플만을 반환함. R Π S로 표현. 차집합(relative complement): 두 릴레이션 중에 공통으로 속하는 투플을 제외한 나머지 첫번째 릴레이션의 투플을 반환함. R - S로 표현. 카티잔 프로덕트(cartesian product): 두 릴레이션을 연결해 하나로 합치는 것. 차수는 두 릴레이션..

무결성 제약 조건(상세)과 관계 대수(relational algebra)

개체 무결성 제약 조건 기본키는 null값을 가져야 하며 릴레이션 내엣 오직 하나의 값만 존재해야 한다는 조건이다. 이는 삽입, 수정, 삭제 시 전부 확인이 되어야 한다. 참조 무결성 제약 조건 참고 관계를 다루는 제약 조건. 자식 외래키는 부모 후보키의 도메인이 동일해야 한다. 삽입 시, 참조하는 테이블은 참조 제약 조건이 지켜져야 한다. 학생 테이블에 다른 학과코드를 삽입하는 경우, 참조 테이블(학과)에 그 값이 없으므로 거부된다. 참조 무결성이 깨는 것이다. 삭제 시. 참조하는 릴레이션(학생)에서는 바로 삭제 가능하다. 삽입과는 반대로, 참조되는 테이블(학과)에서는 다른 추가 작업이 필요하다. 참조하는 테이블의 값도 같이 삭제될 수 있기 때문이다. 이때는 즉시 중시하거나 관련된 값을 대체 값으로 변..

무결성 제약 조건

데이터 무결성(integrity)란? 데이터베이스 내에 있는 데이터의 일관성과 정확성을 지키는 것. 제약조건은 즉슨, 만족시키기 위한 조건. 도메인 제약조건(domain constraint): 릴레이션 내 튜플들은 각 속성의 도메인에서 지정된 값만을 가질 수 있다. (예를 들어, 속성이 나이라면 그 튜플은 정수값만 가질 수 있음) 개체 무결성 제약조건(기본키 제약조건 primary key constraint이라고도 함): 릴레이션 기본키를 지정하고, 그 기본키는 null값을 가지면 안되면 릴레이션에서 오직 하나의 값만을 가져야 한다. 참조 무결성 제약조건(외래키 제약조건 foreign key constraint이라고도 함): 참조하는 외래키(자식)는 참조되는 기본키(부모)의 도메인값이 동일해야 한다. (..

728x90
반응형