728x90

 

[관련]내부로직순서 및 예시

https://rise-up.tistory.com/722

 

계층형 구조(Hierarchical Structure)

부모와 자식 간의 관계를 깊이로 구분하여 표현하는 것으로 상하 수직관계의 트리형태의 구조

보통 카테고리를 분류나 조직도에 많이 사용

 

출처: https://m.blog.naver.com/javaking75/220010288704?view=img_2

 

용어

노드(node) : 위 그림에서 원모양으로 표시된 항목. 각각의 품목이 하나의 노드가 되며 실제 테이블에서는 하나의 로우가 노드

부모(parent) : 부모노드라고도 하며, 트리구조에서 상위에 있는 노드를 의미

자식(child) : 자식노드라고도 하며, 위 그림에서 '모니터'는 컴퓨터의 자식노드이며, 컴퓨터는 모니터와 본체의 부모노드임

리프(leaf) : 리프노드하며, 더이상 하위에 연결된 노드가 없는 최하위 항목을 의미. 즉 자식노드가 없는 노드 (ex : 모니터, 프린터, 랜카드)

루트(root) : 계층형, 트리구조에서 최상위에 있는 노드(ex: 컴퓨터)

레벨(level) : 트리구조에서의 각각의 계층을 의미

루트인 컴퓨터가 1레벨, 순차적으로 그 하위에 있는 모니터, 본체, 프린터가 2레벨, 그 아래가 메인보드, 랜카드가 3레벨이자 리프(leaf)

 

 

 

수행순서

1. START WITH 절에 시작 조건을 찾습니다.

2. CONNECT BY 절에 연결조건을 찾습니다.

 

 

START WITH

어떤 레코드를 최상위로 잡을지 지정

계층 구조 전개의 시작 위치를 지정하는 구문

 

CONNECT BY

부모,자식 관계를 지정

다음에 전개될 자식 데이터를 지정하는 구문

자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 한다.(조인)

 

PRIOR

‘이전’이라는 의미

위의 start with에서 정한 계층구조 시작위치 구문에서 나온 row에서의 값과 PRIOR에 기준점으로 잡은 컬럼과 같은 값을 추출한다

CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정

PRIOR 자식 = 부모 형태를 사용하면,

계층구조에서 자식 데이터에서 부모 데이터(자식 → 부모) 방향으로 전개하는 순방향 전개

PRIOR 부모 = 자식 형태를 사용하면,

반대로 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개하는 역방향 전개

 

 

자료출처
https://www.youtube.com/watch?v=boNut__USIU&list=PLyQR2NzLKOCZU_jjLAdebyx9oE9dvvsrE&index=10

728x90
반응형
728x90

 

 

53P 28번

SQL SERVER에서는 DML문이 Auto Commit이 디폴트로 설정되어있음

 


 

51P 23,26번

DROP

DELETE

TRUCATE

 

DELETE

테이블 안의 데이터 삭제

아스트로(*) 사용불가

Manual Commit

 

TRUNCATE

테이블 자체삭제 X

해당 테이블에 들어있는 모든 행 제거

(=테이블 초기화함)

저장 공간 재사용 가능하도록 해제함

UNDO를 위한 데이터 생성X이기 때문에 DLELETE보다 빠름

Auto Commit

 

DROP

테이블 자체 삭제

(=테이블 정의 자체를 삭제)

Auto Commit

 


 

48p 17,19번

Delete(/Modify) Action

Cascade : Master 삭제 시 Child 같이 삭제

Set Null : Master 삭제 시, Child 해당 필드 Null

Set Default : Master 삭제 시, Child 해당 필드 Default

Restrict : Child 테이블에 PK값이 없는 경우만 Master 삭제 허용

No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음

 

Insert Action

Automatic : Master 테이블에 PK가 없는 경우, Master PK를 생성 후 Child입력

Set Null : Master 테이블에 PK가 없는 경우, Child 외부키를 Null 값으로 처리

Set Default : Master 테이블에 PK가 없는 경우, Child 외부키를 지정된 기본값으로 입력

Depenent : Master 테이블에 PK가 존재할 때만 Child 입력 허용

No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음

 


 

47p 14번

무결성 제약조건 (Integrity Constraint)

**무결성 제약조건**이란 데이터베이스의 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정 등을 제약하기 위한 조건을 뜻합니다.

주요 목적은 데이터베이스에 저장된 데이터의 무결성을 보장하고 데이터베이스의 상태를 일관되게 유지하는 것입니다.

1. 개체 무결성

각 릴레이션의 기본키를 구성하는 속성은 널(NULL) 값이나 중복된 값을 가질 수 없습니다.

[학생] 릴레이션에서 ‘학번’을 기본키로 지정했다면 ‘학번’ 속성은 NULL이 되어서는 안된다.

2. 참조 무결성

외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 합니다.

즉, 각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없습니다.

[수강] 릴레이션에서 ‘학번’ 속성에는 [학생] 릴레이션의 ‘학번’ 속성에 없는 값은 입력할 수 없다.

3. 도메인 무결성

속성들의 값은 정의된 도메인에 속한 값이어야 합니다.

‘성별’이라는 속성에서 ‘남’, ‘여’를 제외한 데이터는 제한되어야 한다.

4. 고유 무결성

특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 각 튜플이 가지는 속성 값들은 서로 달라야 합니다.

[학생] 릴레이션에서 ‘이름’, ‘나이’는 서로 같은 값을 가질 수 있지만 ‘학번’의 경우, 각 튜플은 서로 다른 값을 가져야 한다.

5. NULL 무결성

릴레이션의 특정 속성 값은 NULL 될 수 없습니다.

[학생] 릴레이션 정의 시 ‘과목’ 속성에 NULL 값이 올 수 없도록 제한했다면 ‘과목’ 속성에 NULL이 있어서는 안된다.

6. 키 무결성

각 릴레이션은 최소한 한 개 이상의 키가 존재해야 합니다.

 


 

44p 9번

제약조건이 걸려있어도 삭제할 수 있는 방법

ON DELETE SET NULL

삭제 옵션

부모 키 삭제 시 자식 키를 NULL로 변경

ON DELETE CASCADE

부모 키 삭제 시, 자식 키도 함께 삭제

728x90
반응형
728x90

 

 

12p 14번

속성(Attribute)

업무에서 필요로 하는 인스턴스에서 관리하고자 하는 최소의 데이터 단위

(더 이상 분리되지 않는 최소의 단위)

 


 

11p 10번

 

엔티티(Entity)란

업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)

또는,

엔티티는 업무 활동상 지속적인 관심을 가지고 있어야 하는 대상으로서 그 대상들 간에 동질성을 지닌 인스턴스들이나 그들이 행하는 행위의 집합

 

엔티티 특징

엔티티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성(Attribute)을 갖는다

ex) ‘학생’이라는 엔터티는 학번, 이름, 이수학점, 등록일자, 생일, 주소, 전화번호, 전공 등의 속성을 갖을 수 있다

 

 

엔티티 속성의 종류

1)공통 속성

 엔티티 인스턴스 전체가 공유할 수 있는 공통 속성

2)개별 속성

엔티티 인스턴스 중 일부에만 해당하는 개별 속성

 

엔티티 속성들을 엔티티 인스턴스 전체가 공유할 수 있는 공통 속성과 엔티티 인스턴스 중 일부에만 해당하는 개별 속성으로 분류할 수 있다. 엔티티는 인스턴스의 집합이라고 할 수 있다.

 

 

엔티티의 인스턴스

정의 : 엔티티의 하나의 값

ex)예를 들어 과목은 수학, 영어, 국어가 존재할 수 있는데 수학, 영어, 국어는 각각이 과목이라는 엔티티의 인스턴스들이라고 할 수 있다. 또한 사건이라는 엔티티에는 사건번호2010-001, 2010-002 등의 사건이 인스턴스가 될 수 있다.

엔터티를 이해할 때 눈에 보이는(Tangible)한 것만 엔터티로 생각해서는 안되며 눈에 보이지 않는 개념 등에 대해서도 엔터티로서 인식을 할 수 있어야 한다. 

 


 

10p 6번

스키마란?

DB 구조와 제약조건에 관한 전반적인 분명하고 자세한 내용을 기술한 것

상세하게 말하면,

개체의 특성을 나타내는 속성(Attribute)과 속성들의 집합으로 이루어진 개체(Entity),

개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들이 유지해야 할 제약조건들을 기술한 것

외부 스키마 : 개개 사용자가 보는 개인적 DB 스키마 개념 스키마 : 모든 사용자 관점을 통합한 전체 DB 내부 스키마 : 물리적 장치에서 데이터가 실제적 저장

 


 

8p 3번

매핑(Mapping)

매핑의 대표적 사례로는 하기 항목과 같은 것들이 있다.프로그래밍 영역에서 매핑은 키(key) 역할을 하는 데이터와 값(value) 역할을 하는 데이터를 짝 지어(=연결 지어) 저장하는 데이터 구조를 말한다. 키는 저장된 데이터

728x90
반응형
728x90

 

 

사용 프로그램

Oracle 11g

 

메세지

ORA-25154: column part of USING clause cannot have qualifier 25154. 00000 - "column part of USING clause cannot have qualifier"

*Cause: Columns that are used for a named-join (either a NATURAL join or a join with a USING clause) cannot have an explicit qualifier.

*Action: Remove the qualifier.

 

상황

ANSI 표준구문으로 사번, 사원 명, 직급코드, 직급명 조회할려던 중 발생

 

원인

ANSI 표준구문에서 USING 자체가 다른 테이블에 같은 컬럼명을 JOIN한다는 전제가 깔려있기에 SELECT절에 JOIN되는 각 컬럼 앞에 테이블 경로 지정해줄 필요가 없다

 

해결

식별자(quilifier) 삭제

 

-- 에러 해결 전
EMP_ID, EMP_NAME, E.JOB_CODE, J.JOB_NAME
FROM EMPLOYEE E
    JOIN JOB J USING(JOB_CODE);
    
 -- 에러 해결 후
 EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
FROM EMPLOYEE
    JOIN JOB USING(JOB_CODE);
728x90
반응형
728x90

메세지

ORA-08002: sequence SEQ_EMPID2.CURRVAL is not yet defined in this session

원인

아직 시퀸스명.NEXTVAL로 시퀸스를 실행시키지 않아서 에러.

해결

NEXTVAL에서 CURRVAL로 최초값을 받아오자.

 

--SEQ_EMPID에 대한 '현재 값' 조회
SELECT SEQ_EMPID.CURRVAL FROM DUAL;
-- ERROR : ORA-08002: sequence SEQ_EMPID2.CURRVAL is not yet defined in this session
-- 원인 : 아직 시퀸스명.NEXTVAL로 시퀸스를 실행시키지 않아서 에러. NEXTVAL에서 CURRVAL로 최초값을 받아오자.
SELECT SEQ_EMPID.NEXTVAL FROM DUAL; -- 300 // 305 // 310 누를 때마다 5씩 값 증가되서 출력됨. 최대치설정이310이라 멈춤
728x90
반응형
728x90

메세지

ORA-00998: must name this expression with a column alias

 

원인

컬럼에 별칭 짓겠다고 하고 안만들어서 난 에러

※별칭 생성해야만 할 때 : 서브쿼리 SELECT절 안에 함수가 포함되면 반드시 별칭 지정

 

728x90
반응형
728x90

메세지

ORA-12983: cannot drop all columns in a table 12983. 00000 - "cannot drop all columns in a table"

*Cause: An attempt was made to drop all columns in a table. *Action: Ensure that at least one column remains in the table after the drop column operation.

원인

테이블에 컬럼을 전부 지우려다 발생

테이블에 컬럼이 하나라도 남아있어야한다

 

ALTER TABLE DEPT_COPY2
DROP COLUMN DEPT_TITLE;
728x90
반응형
728x90

메세지

ORA-01441: cannot decrease column length because some value is too big

 

원인

넣을려는 곳의 정해진 자료형의 값보다 큰 값을 넣을려고 해서 발생

크기 수정할 때는 안에 데이터의 크기가 어떤지를 보고 수정해야함

ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE VARCHAR2(10);
-- ORA-01441: cannot decrease column length because some value is too big
-- 크기 수정할 때는 안에 데이터의 크기가 어떤지를 보고 수정해야함

 

728x90
반응형
728x90

메세지

ORA-01841: (full) year must be between -4713 and +9999, and not be 0

 

원인

컬럼명의 순서를 바꿔서 들어갈 수 없는 데이터 형식이 넣어졌기에 에러발생

 

상황

테이블의 모든 컬럼에 값을 넣을 때는 컬럼명 명시를 생략 가능하여 해보던 중

해결 컬럼명을 명시하는 경우에는 명시한 순서를 따라 데이터를 넣으면 되고, 생략 시에는 테이블에 있는 컬럼명 순서을 따라야 한다

 

-- 테이블의 모든 컬럼에 값을 넣을 때는 컬럼명 명시를 생략 가능            
-- INSERT 시, 컬럼명을 생략하려면 테이블에 있는 컬럼 순서를 정확히 지켜서 넣어야 함
INSERT INTO EMPLOYEE -- 컬럼명 명시부분 삭제
VALUES(900,'강건강','990311-1451201','kang_kk@kh.or.kr','01011112222',
        'D1','J7','S3',4300000,0.2,200,SYSDATE,'N',NULL);            
-- ORA-01841: (full) year must be between -4713 and +9999, and not be 0
-- 원인 : ENT_YN,ENT_DATE의 순서를 바꿔서 에러발생
-- 컬럼명을 명시하는 경우에는 명시한 순서를 따라 데이터를 넣으면 되고, 
-- 생략 시에는 테이블에 있는 컬럼명 순서을 따라야 한다
728x90
반응형
728x90

메세지

ORA-02290: check constraint (KH.SYS_C007063) violated

 

원인

'남'과 '여'만 들어가게끔 제약 걸어놨는데 '남자'를 넣었기에 에러 발생

 

상황

INSERT 시, 컬럼명을 생략하려면 테이블에 있는 컬럼 순서를 정확히 지켜서 넣어야 하는 걸 알기위해 에러발생시킴

 

참조코드

CREATE TABLE USER_CHECK2(
    TEST_NUMBER NUMBER,
    CONSTRAINT UC2_TN_CK CHECK(TEST_NUMBER >0 )
);

INSERT INTO USER_CHECK2 VALUES(1, 'user01', 'pass01', '강건강', '남', '010-1111-2222', 'kang@k.k');
INSERT INTO USER_CHECK2 VALUES(2, 'user02', 'pass02', '남나눔', '남자', '010-2222-3333', 'nam@n.n');
-- ERROR : ORA-02290: check constraint (KH.SYS_C007063) violated
-- 원인 : '남'과 '여'만 들어가게끔 제약 걸어놨는데 '남자'를 넣었기에 에러 발생

 

728x90
반응형

+ Recent posts