728x90
반응형
SMALL

*이기적 영진닷컴 Youtube Link - https://www.youtube.com/watch?v=5nSTaC-llCQ&list=PL6i7rGeEmTvp_MYm0zuiFe7COrM3endfu&index=11

 

파일 시스템은 하드 디스크나 CD-ROM 같은 물리적 저장소를 관리하는 파일 관리자

파일이나 자료를 쉽게 발견하고 접근할 수 있게 하기 위해서 보관 또는 조직적인 체제라고 보면 된다.

일반적으로 리눅스 파일 시스템을 구성하는 구조도는 위 그림과 같다.

부트 블럭이 있고 그룹별로 블럭이 구성되어 있다.

조금 더 자세히 보면 

슈퍼 블럭, 그룹 디스크립터, 블럭 비트맵, 인코드 비트맵, 인코드 테이블 그리고 데이터 블럭으로 나눈다.

슈퍼 블럭: 시스템 관련 정보를 저장하는 블럭, 시스템 관련 정보는 블럭의 크기나 총 블럭의 개수, 블럭 그룹 개수 그리고 inode 개수를 저장

그룹 디스크립터: 각 블럭 그룹을 관리하는 정보를 저장, 블럭 비트맵, inode 비트맵 번호 등을 저장

블럭 비트맵: 블럭들의 상태를 나타내는 공간

inode 비트맵: 파일의 제어 정보나 블럭 포인트를 저장한다. 즉 파일에는 고유 번호가 붙여지게 되는데 그 번호 뿐만 아니라 파일 형태 크기 위치 소유자 정보 등 파일의 구체적인 정보가 inode에 구체적으로 저장이 되서 파일을 제어, inode의 상태 정보를 나타낸다.

inode Table: 각각의 inode의 정보를 나타내는 inode descriptors로 구성

 

리눅스는 다양한 파일 시스템을 지원

리눅스 전용 파일 시스템을 보겠다.

ext 계열이다.

ext1: 리눅스 초기에 사용되던 파일 관리자, 2gb의 데이터 까지만 컨트롤, 파일명도 255자까지 제한

파일명 지정 시 어떤 파일 시스템을 사용하느냐에 따라서 파일명 규칙이 있다. 

아이노드 수정이 불가해서 즉 파일에 대한 제어 정보나 이런 것들을 수정할 수 없었다.

ext2: ext1 다음 버전.

2gb의 데이터 까지만 컨트롤할 수 있었던 것을 보완해서 고용량 디스크도 컨트롤할 수 있게 설계된 파일 시스템

ext3: ext의 확장판.

저널링 기능을 지원. 

저널링은 로그 파일. 저널을 다른 말로 로그. 로그를 보고 시스템의 상태를 판단하게 되는데 그러한 기능들을 지원.

시스템의 상태를 안전하게 복원할 수 있는 기능을 지원할 수 있는 파일 시스템

ext4: 최근에는 ext4를 사용.

ext2 및 ext3와 호환이 가능한 버전.

최대 16TB 파일도 지원.

64비트 기억 공간 제한 없음.

<저널링 파일 시스템>

저널이 로그를 보통 저널이라고 이야기 한다. 

저널이라는 로그를 보고 시스템 상태를 저장.

시스템이 비정상적으로 종료하게 되면 저널 정보를 검사를 하고 저널을 베이스로 해서 파일 시스템을 안전하게 복원

ext3, ext4, XFS, JFS, ReiserFS 등이 있다.

JFS: IBM 사에서 만든 독자적인 저널링 시스템, GPL 라이센스를 공유하고 있음, 리눅스용으로 개발되고 있음

XFS: eXtended File System의 약자. 고성능 저널링 시스템.

64비트 파일 시스템을 지원. 높은 확장성이나 처리율을 가지고 있다.

파일 수와 상관 없이 시스템이 다운되면 (예기치 못한 상황이 발생) 신속하게 복구나 재시작이 가능하게 한다.

ReiserFS: 독일의 한스 라이저가 개발한 파일 시스템. 복원이 안정적으로 진행이 되서 JFS나 XFS도 많이 사용되지만 ReiserFS도 많이 사용되는 파일 시스템.

 

<네트워크 파일 시스템>

업무를 하다 보면 파일 공유 프린트 공유를 하게 된다.

이 때 네트워크 파일 시스템을 이용해서 작업 공유 네트워크 공유를 할 수 있게 된다.

SMB: Server Message Block 이라고 해서 윈도우 운영체제에서 파일이나 프린트 공유를 할 때 일반적으로 사용하는 네트워크 파일 시스템. 삼바 파일 시스템에서도 SMB를 이용해서 이기종 운영체제, 윈도우와 리눅스 사이에서 자료를 공유할 때도 이 SMB를 사용해서 이기종 운영체제 관해서도 원활하게 네트워크 공유를 가능하게 해주는 파일 시스템

CIFS: Common Internet File System의 약자로 SMB를 확장한 파일 시스템. 

NFS: Network File System으로 썬 마이크로 시스템사에서 개발한 네트워크 공유 프로토콜. 주로 동기종 SMB는 이기종 운영체제에 관해서 파일 공유를 가능하게 하는 반면 동기종 같은 기종 운영체제들 간에 파일 공유를 할 때 일반적으로 사용하는 파일 시스템

 

<기타 지원 가능한 파일 시스템(1)>

MS에서 지원하는 파일 시스템도 지원하고 있다.

FAT: 윈도우 NT 계열에서 사용했던 파일 시스템

VFAT: FAT 파일 시스템 확장. FAT의 단점인 하드 용량, 디스크 용량 관리 용량의 제한을 해결하다 보니 디스크 관리 영역이 더 커졌다. 파일명 지정에 약간의 제약이 있다. 최고 255자까지 만들 수 있다. 대소문자를 구분하지 않는다. MS 쪽에서의 초기 파일 시스템이라고 본다면 리눅스에서는 ext와 특성이 동급 형태라고 보면 된다.

FAT32: SMB를 확장한 파일 시스템. Window 95, 98, ME 에서 자주 사용되던 파일 시스템. 그러나 저장할 수 있는 파일 용량을 32GB 이상은 관리할 수 없다. 

 

NTFS: MS 계열에서 가장 안정적인 파일 시스템. 대용량 파일 저장 관리할 수 있음. 16EB 정도 데이터를 저장할 수 있는 기존 FAT32보다는 대용량의 파일을 저장할 수 있는 장점을 갖고 있다. MS계열에서 대부분 NTFS를 사용한다. 리눅스에서도 NTFS는 사용할 수 있게 지정해놓고 있기는 하다.

ISO 9660: 1988년에 제정된 표준으로 CD나 CD-ROM을 관리할 수 있게 해주는 파일 시스템

UDF: Universal Disk Format의 약자로 광확 매체용 파일 시스템의 표준. ISO 9660을 대처해서 만든 DVD 에 대한 파일 시스템.

HPFS: 운영체제 중에서도 OS/2 운영체제가 있다. 마이크로 소프트와 IBM 공동 개발한 파일 시스템. OS/2 운영체제를 운영 관리하기 위한 파일 시스템

 

<관련 명령어>

mount

특정 디바이스를 디렉토리 처럼 사용하기 위해서 장치와 디렉토리를 연결하는 작업이다.

리눅스는 PnP기능을 지원하고 있지만 지원하는 하드웨어가 많지 않기 때문에 시스템을 부팅 후에 수동으로 마운트를 해서 시스템을 사용을 일반적으로 하게 된다.

마운트 관련된 시스템 정보는 /etc/mtab이라고 하는 파일에서 마운트된 블럭 정보들을 확인할 수 있다.

마운트 설정은 옵션 뒤에 디바이스명이나 디렉토리명을 입력하면 된다.

이 때 옵션에서는 파일 시스템을 지정할 수 있다.

VFAT이나 ext계열이나 ISO, SMB 이런 것들을 옵션 t를 이용해서 파일 시스템을 지정할 수 있다.

umount

설정된 마운트를 해결할 때는 umount를 이용해서 설정된 마운트를 해제할 수 있음

eject

이동식 보조기억장치, DVD나 CD-ROM 같은 매체를 미디어에서 해제하고 제거하는 명령어.

특히 r은 CD-ROM을 제거할 때 사용.

f는 플로피를 제거할 때 사용.

 

fdisk

리눅스 설치하는 과정에서 보았는데, 새로운 파티션을 생성하거나 기존 파티션을 삭제하거나 파티션을 파일 시스템을 지정할 때 보통 fdisk를 이용해서 작업을 할 수 있다.

한번에 한 디스크에만 적용되서 수행할 수 있음.

fdisk를 사용하기 위해서는 어떤 디스크에 파티션을 나눌지 먼저 계획을 잡고 진행을 해야만 한다.

mkfs

fdisk를 통해서 파티션을 나눈 다음에 파일 시스템을 생성하기 위해서 사용하는 명령어

mke2fs

ext2, ext3, ext4 타입의 리눅스 파일 시스템을 생성할 때 사용하는 명령어.

즉 fdisk를 통해 파티션을 나누었다면

나누어진 파티션에 파일 시스템을 지정하는 명령어 중 하나가 mkfs, mke2fs 둘 중 하나를 적절하게 이용해서 파일 시스템을 결정하면 된다.

 

fsck

파일의 무결성을 점검하는 명령어.

무결성이라 함은 데이터에 변조가 있었는지 이러한 이상 유무를 오류 체크를 확인하는 명령어.

만약에 이 과정에서 문제가 일어난 파일들은 /lost+found 라는 디렉토리에 일시적으로 생성이 되서 그 오류 내용들을 확인할 수 있다.

특히 fsck에서 점검하는 내용은 저널 로그를 점검하거나 아이노드나 간접 데이터 블록, 파일 크기, 디렉토리 항목 등등을 확인할 수 있다.

e2fsck

리눅스 전용 파일 시스템인 ext2, ext3, ext4 타입의 리눅스 파일 시스템 형태로 디스크를 포맷할 때 보통 사용한다.

이 때 다양한 옵션들이 사용하는데

p: 파일 시스템을 검사하면서 자동으로 복구하는 명령어

n: 모든 질의에 no를 주어서 작업을 처리하게 한다.

y: 모들 질의에 yes로 처리해서 처리 속도를 빨리 낼 때 사용하는 명령어

du

disk use의 약자로

디렉토리 별로 디스크 사용량을 확인할 때 사용하는 명령어

df

시스템에 마운트된 하드 디스크의 용량을 확인할 때 사용을 한다.

기본적으로 1024바이트 블럭단위로 확인을 한다.

옵션은 h, T, t, a, k, i 등이 있다.

T: 파일 시스템 유형이나 파티션 정보를 좀 더 상세하게 확인

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=OFqWRsoSsy8&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=21

 

41. INTERSECT

1. UNION ALL

2. UNION

3. MINUS (sql server EXCEPT)

4. INTERSECT

42. Window Function

보기 1번은 내가 데이터를 보고 싶은데 이런 데이터를 줘

이것 저것 비교 출력해주는 최적의 방안을 구한다.

보기 2번은 RANGE BETWEEN / ROWS BETWEEN이 된다.

보기 3번은 GROUP BY는 행이 줄어들지만, WINDOW FUNCTION은 행이 줄어들지 않는다.

보기 4번은 같이 실행은 되지만 의미가 있는 데이터가 나오지는 않는다.

43. GROUP BY

COUNT(GRADE)를 하면 NULL은 제외하고 출력을 한다.

WHERE GRADE IN ('차장', '부장', '널'); 은 이 '널'은 의미가 없는 데이터이기 때문에 NULL을 제외하고 샌다.

그리고 COUNT(*) FROM EMP GROUP BY GRADE;를 하면 이렇게 사원, 대리, 과장, 차장, 부장 그리고 NULL 까지 수가 같이 조회가 된다. GRADE가 NULL인 값까지 같이 조회가 된다.

44. LAG() 함수

LAG(컬럼, 오프셋, 디폴트) 로 구성되어 있다.

컬럼의 오프셋 만큼의 이전 행의 값을 출력한다. 만일 없으면 NULL을 입력하는데 디폴트 값이 있으면 디폴트 값을 입력한다.

45. 중복 테이블 추가

A 시스템과 B시스템이 있는데 서로 동일한 테이블의 구조를 갖은 테이블 A,C가 있다.

이렇게 GRANT 권한을 주어서 A시스템의 C테이블에 접속을 한다.

그래서 B시스템의 A테이블과 A시스템의 C테이블을 원격 조인을 하려고 한다.

그런데 B시스템에서 그냥 C테이블을 갖고 와서 중복 테이블을 만드는 것이다.

이러한 기법을 중복 테이블 추가라고 한다.

46. UPPER

문자열을 대문자로 바꿔준다.

전부 바꿔준다.

'12#3가나abc' -> '12#3가나ABC'

47. LEAD()

LEAD(SAL) -> LEAD(SAL,1)

기본 디폴트 값은 1이다.

48. UNION

UNION은 중복을 제거한다.

UNION ALL은 중복을 제거하지 않는다.

답은 2번이다.

49. NULL

날짜 더하기 NULL을 하면

NULL은 산술/비교 자체가 아얘 안 되므로

NULL이 출력된다.

50. CUBE

GROUP BY를 진행하고

전체 1건 

DNAME별 소계 3건

JOB별 소계 5건

그리고 DNAME, JOB을 GROUP BY한 결과 9건

더해서 총 18건이 나온다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=1XYh_WGmTTU&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=20

 

31. FULL OUTER JOIN

예시 데이터를 만들어서 확인하는 것이 좋다.

A테이블에는 1,2,3 그리고 B테이블에는 2,3,4 이렇게

2,3 겹치는 데이터를 포함해서 만들어주는 것이 좋다.

답은 4번이다.

32. 그룹 함수

33. LIKE

문자열은 대소문자를 구분한다.

34. 물리적 테이블 명

숫자로 시작하면 안된다.

_,$,#만 가능하다.

숫자도 사용 가능하다.

문자로 시작해야 한다.

대소문자 구별된다.

35. 내장 함수

ROUND(숫자, m) - 반올림 함수, 소수점 m자리까지 반올림한다. m의 기본값은 0이다.

CEIL - 올림 함수

TRUNC - 테이블 내용 삭제 함수

NULLIF - A,B가 같으면 NULL 아니면 A를 반환한다.

36. 오류

1번이 답이다.

1. INSERT INTO T_ORDER VALUES (2, SYSDATE-1, 'ABC');

이면 컬럼명을 적어주지 않으면 오류가 발생한다.

DEFAULT 값이 있더라도 오류가 발생한다.

SYSDATE - 1을 하면 어제 날짜가 이렇게 들어가 있다.

그리고 C4에 DEFAULT값인 1000이 들어가 있다.

DELETE T_ORDER; 이렇게 FROM을 생략해도 된다. 하지만 관례상 써주는 것이 좋다.

37. ORDER BY

ORDER BY에서 명칭도 사용이 가능합니다.

숫자와 컬럼을 혼용하여 사용할 수 있다.

SELECT 절에서 사용하지 않은 컬럼도 ORDER BY 절에서 사용할 수 있다.

오라클은 ORDER BY를 할 때 NULL은 가장 뒤로 밀린다.

그래서 DESC를 하면 NULL이 가장 위로 올라온다.

SQL SERVER는 ORDER BY를 하면 가장 작다고 판단된 NULL이 가장 먼저 나온다.

ORDER BY의 DEFAULT는 오름차순(ASC)이다.

답은 4번이다.

38. 비동등 조인

먼저 크로스 조인을 하고

그 상태에서 조인의 조건과 동일한 값을 조회하면 된다.

그러면 이렇게 T_ORDER를 JUMUN별로 SUM한 값이 어떤 등급에 속하는지를

조회하는 결과를 얻을 수 있다.

40. 실행순서

1. NULL은 연산이 안 되므로 AVG를 할 때 빼고 계산을 한다. 그래서 10이다.

2. SELECT 하기 전에 WHERE가 먼저 실행된다. 그래서 COL1>0 인 것들 중에서 AVG(COL3)를 한다. 그래서 20이다.

3. WHERE COL1 IS NOT NULL 이므로 COL1이 NULL인 행은 뺀다. 그리고 COL3의 평균값을 조회를 한다. 이 때 NULL은 연산이 불가능하므로 뺀다. 20이다.

그래서 정답은 3번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=gZ42zHGUFdQ&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=19

 

21. CUBE 문제

정답은 1번이다.

 

22. CUBE

정답은 1번이다.

ROLLUP은 전체와 소계를 구한다.

ROLLUP, CUBE, GROUPING SETS는 여러 컬럼에 대해서도 사용할 수 있다.

ROLLUP 보다 CUBE가 더 시스템 부하를 많이 시킨다.

23. COUNT()

정답은 3번이다.

24. 트랜잭션

원자성은 모두 성공하거나 전혀 실행되지 않아야 한다. 성공하면 커밋 실패하면 롤백이 되는 것이다.

일관성은 트랜잭션 실행 전 DB 내용이 정상이라면 트랜잭션 이후에도 DB 내용이 정상이어야 한다. 제약 조건을 통해서 db 내용이 정상일 수 있도록 지킬 수 있다.

고립성/격리성은 트랜잭셩 실행 도중 다른 트랜잭션이 영향을 주면 안된다.

지속성은 트랜잭션이 성공적으로 수행되면 영구적으로 DB에 저장되어야 한다. 커밋을 했으면 db에 영구반영이 되어야 한다는 의미이다.

고립성/격리성의 예이다.

sqldeveloper 창을 두개를 열었다.

두 명의 사용자가 사용을 하는 것이다.

한 명은 데이터를 update하고 아직 commit은 하지 않았다.

다른 한명은 똑같은 데이터를 update를 하고 있다. 그러면 계속 기다리고 있다.

왼쪽 사용자가 롤백을 하면

오른쪽에서 바로 처리가 되는 것을 볼 수 있다.

고립성/격리성이 지켜져야 동시에 데이터를 바꿀 때 이상해지지 않는다.

25. COUNT() 및 DISTINCT

정답은 4번이다.

26. LEFT OUTER JOIN

정답은 1번이다.

27. 윈도우 함수 - 순위

정답은 2번이다.

파티션에 대해서 순위를 계산한다.

파티션에는 ORDER BY가 들어간다.

또한 WINDOWING 절이 들어간다.

WINDOWING 절의 DEFAULT는 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW가 들어간다.

-> 정렬된 결과의 처음부터 현재 행까지 

- WINDOWING 절의 구조

[블로그 참고]https://lee1535.tistory.com/19

RANK() 함수는 동일한 순위는 동일한 값이 부여된다.

DENSE_RANK() 함수는 동일한 순위를 하나의 건수로 보아 다음 순위는 +1이 온다.

ROW_NUMBER() 함수는 고유한 순위가 부여된다.

29. 트랜잭션

똑같은 이름으로 T1이라는 SAVEPOINT에 저장을 했기 때문에

T1이 두번째 T1으로 변경된다.

답은 2번이 된다.

30. AUTO COMMIT

오라클의 경우 DEFAULT로 AUTO COMMIT = FALSE 이고 DML은 직접 커밋 그리고 DDL은 자동 커밋이 된다.

그러나 SQL SERVER의 경우 DEFAULT로 AUTO COMMIT = TRUE이다. 그래서 DML도 자동 커밋 그리고 DDL도 자동 커밋이다.

SQL SERVER를 AUTO COMMIT = FALSE로 바꾸면 DML 직접 커밋 그리고 DDL도 직접 커밋이 된다.

1. SQL SERVER의 경우 AUTO COMMIT이 FALSE인데 ROLLBACK을 하면 UPDATE구 뿐만 아니라 그 위의 CREATE구도 롤백된다.

2. 오라클의 경우 ROLLBACK을 하면 UPDATE구가 취소된다.

3. 오라클에서 ROLLBACK을 하면 테이블 생성은 롤백되지 않고 UPDATE구만 롤백된다. 마지막 커밋 시점은 CREATE 구까지가 된다.

4. AUTO COMMIT이 FALSE인 경우에 해당한다. 

답은 3번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=7bzILN8y5K0&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=18

 

11. TRUNCATE 문제

답은 1번이다.

DDL -> 자동 커밋

CREATE, ALTER, DROP, TRUNCATE는 자동 커밋된다.

테이블 용량이 줄어든다.

테이블 구조는 남아있다.

ROLLBACK할 수 없다.

TRUNCATE는 테이블을 초기 상태로 되돌린다.

12. 서브쿼리 (인라인뷰)

GROUP BY C1의 경우 C1을 SELECT에 사용할 수 있다.

그러나 다른 컬럼을 SELECT할 경우 크기가 맞지 않아 SELECT가 안 된다.

서브쿼리의 인라인뷰는 가상의 테이블처럼 사용한다.

그래서 애스터리크로 출력을 했으므로 N2를 ORDER BY 절에서 사용할 수 있다.

답은 4번이다.

ORDER BY 그리고 숫자가 나오면 

해당 숫자의 컬럼을 SELECT에서 찾아본다.

13. 프로시저와 트리거

프로시저는 우리가 만들면서 COMMIT과 ROLLBACK을 할 수 있다.

하지만 트리거는 자동실행되므로 COMMIT과 ROLLBACK이 불가능하다.

프로시저와 트리거도 생성하면 소스코드가 저장된다.

저장되는 공간이 이렇게 따로 있다.

프로시저와 트리거도 CREATE구로 만든다.

프로시저는 EXECUTE, EXEC 명령어로 실행한다. 그러나 트리거는 자동실행된다.

14. 계층형 쿼리

정답은 3번이다.

빈칸은 NULL값이다.

CONNECT_BY_ISLEAF는 자식이 있으면 0을 단말이면 1을 반환한다.

LEVEL이 1이면 최상위 계층이다.

15. ORDER BY

정답은 1번이다.

SELECT * FROM 야구선수 

애스터리크를 사용했으므로 모든 컬럼이 조회된다. 이 컬럼들을 ORDER BY에서 사용할 수 있다.

17. NULL 연산

SELECT SUM(C1 + C2 + C3 + C4) FROM Mytext17;

을 수행하면 컬럼에 하나라도 NULL이 들어가 있으면

연산이 제대로 수행될 수 없어 NULL을 반환한다.

집계 함수는 NULL을 무시한다.

정답은 3번이다.

18. NULL 함수

19. 계층형 쿼리

- 보기1

계층형 쿼리는 먼저 테이블을 구하고 WHERE절이 사용된다.

다음 오른쪽 그림과 같이 계층형으로 쿼리가 조회된다.

- 보기2

이렇게 더이상 계층 조건에 맞지 않으면

계층을 중단하고 테이블을 반환한다.

- 보기3

먼저 START WITH 행을 써주고

조건에 부합하지 않다면

그대로 이 한 줄만 출력된다.

결과값과 동일하므로 답은 3번이다.

19. ROLLUP

GROUP BY ROLLUP은 계층적으로 구한다.

ROLLUP은 GROUP BY EMPNO, DEPTNO 그리고 GROUP BY EMPNO 그리고 GROUP BY 전체 

이렇게 해서 각 그룹별 연봉 합계와, 직원번호별 연봉 합계와, 전체 연봉 합계를 구할 수 있게 된다.

정답은 1번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=x_SSdptNWGo&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=17

 

1. 도메인 문제

예를 들어 CREATE TABLE COL1 NUMBER(10) NOT NULL이면

NOT NULL을 보고 도메인이라고 한다.

입력받을 수 있는 값의 범위를 셋팅을 한 것이다.

엔터티(개념적 모델링) : 테이블(물리적 모델링) : 릴레이션(논리적 모델링)

속성 : 컬럼

도메인 : 제약조건

릴레이션에서 모든 속성의 도메인은 원자적(Atomic)이어야 한다.

2. IE 표기법

고객 엔터티의 고객번호가 내부 식별자라면

계좌마스터 엔터티에서 고객번호(FK)는 외부 식별자이다.

답은 2번이다.

주식별자는 고객번호(PK)를 말하고 보조식별자는 주민등록번호와 같은 것을 말한다.

단일 식별자는 고객 엔터티의 고객번호 즉 하나의 식별자만 존재하는 것을 말하며

계좌마스터 엔터티는 계좌번호와 고객번호 이 두개를 식별자로 두므로 복합 식별자라고 부른다.

본질 식별자는 회원 ID 등을 말하며 인조 식별자는 0001, 0002, 0003과 같은 편의, 임의의 일련번호를 말한다.

3. 주식별자 도출기준과 특징

주민등록번호를 왜 주식별자로 두지 않느냐

왜 고객번호를 주식별자로 두느냐의 문제이다.

업무에서 자주 쓰이는 속성이어야 한다.

명칭, 이름 등은 피해야 한다.

속성의 수가 많아서는 안된다. 복합 식별자는 최소여야 한다.

인스턴스를 유일하게 식별해야 한다.

주식별자 속성이 많아선 안 된다.

주식별자는 가급적 변하면 안 된다.

주식별자는 값이 꼭 입력되어야 한다.

4. 엔터티

엔터티는 2개 이상의 속성과 2개 이상의 인스턴스가 있어야 한다.

이름은 속성이다.

회원은 엔터티에 부합하다.

A 쇼핑몰의 경우 A 쇼핑몰이라고 한정이 되어 있다. 그냥 쇼핑몰이었다면 엔터티었겠지만 A 쇼핑몰 하나는 엔터티가 될 수 없다. 인스턴스이다.

배송지 주소는 속성이다.

5. 주식별자

주 식별자는 NULL 값을 가질 수 없다.

6. 반정규화

논리적 모델링 때는 정규화를 진행합니다.

그리고 물리적 모델링 때 테이블을 설계하다가 성능을 고려하면 반정규화를 진행하게 됩니다.

주로 파티셔닝 또는 인덱스로 성능을 해결을 한다.

테이블을 나눈다.

그러나 그 외에도 방법이 없다면 데이터 보안성을 위해서 반정규화를 한다.

답은 2번이다. 

7. ERD

고객의 고객번호가 주문의 주식별자의 조합으로 사용되고 있다.

값이 필수이며 NULL값이 입력되서는 안 된다.

이를 강한 식별자 관계라고 한다.

하나의 배송지정보에는 여러개의 주문이 들어갈 수 있다.

그리고 하나의 제품은 여러 주문에 포함될 수 있다. 하나의 드라이기를 여러명이 주문할 수 있다.

8. 테이블에 대한 관계

다대다 M:N 관계이다.

답은 3번이다.

9. 테이블에 대한 이상현상

답은 2번이다.

갱신을 할 경우 유비의 스마트폰 뿐만 아니라 다른 사람들의 스마트폰의 정보도 같이 변경해주어야 데이터의 무결성을 지킬 수 있다.

10. 엔터티 속성

답은 2번이다.

하나의 속성은 하나의 속성만 들어가야 한다.

속성명은 명사를 사용하여야 한다.

오늘 배송된 상품 이렇게 서술식으로 속성명을 사용해선 안 된다.

다 나누어 주어야 한다. 시간, 상품명, 배송 여부 등

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=qCAXD2ukvTE&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=12

 

01. 파티셔닝 기법

파티셔닝이란

어떤 테이블을 수평으로 쪼개는 것이다.

그런데 이 테이블을 물리적으로 쪼개는 것이 아니라 논리적으로 쪼갠다.

실제 테이블은 하나인데, 가상의 논리적으로 

이렇게 하나의 테이블에 마치 3개의 테이블이 있는 것 처럼 사용하겠다.

물리적으로 분할하지 않는다의 의미이다.

- range partition: 데이터 값의 범위를 기준으로 파티션을 수행 (주로 주기, 날짜 범위)

- list partition: 특정 값을 지정해서 파티션을 수행 (서울, 주기 x 항목)

- hash partition: 직접 조건으 주는 것이 아니다. 임의의 값을 주면 큰 공간안에 알아서 데이터를 저장하는 것이다.

- composite partition: 범위와 해시를 복합적으로 사용해서 파티션을 수행한다.

데이터의 삭제도 파티셔닝을 기준으로 삭제할 수 있다.

list partition의 경우 항목을 지정해서 파티션을 수행하기 때문에 쉽게 데이터를 삭제할 수 없다.

02. 속성의 특성에 따른 분류

정답은 (2)이다.

구성방식에 따른 속성의 분류도 있다.

03. 비식별 관계

직원과 직원연락처 관계는 

직원은 여러개의 직원 연락처를 갖을 수 있다.

그래서 중복을 피하여 PK를 만들기 위해

직원ID + 구분코드 (예를 들면, 집전화, 휴대폰, 회사 연락처) 등을 연결해서 유일한 식별자를 만든다.

강한 식별 관계와 약한 식별관계는 이렇다.

직원의 PK는 직원 연락처에서 반드시 갖고 있어야 하며 이 PK를 기본키로 사용을 한다.

이러한 경우 강한식별관계라고 한다.

하지만 부서의 PK는 직원에서 하나의 속성과 같다. 

이러한 경우 약한 연결 관계, 즉 비식별자관계라고 한다.

BARKER 표기법에서는 비식별자관계를 점선으로 표시하지 않는다.

BAKER 표기법에서는 1이 식별자 관계를 말한다. 1이 없으면 비식별자 관계인 것이다.

IE 표기법에서는 비식별자관계를 점선으로 표시한다.

04. ER 모델링의 표기법

05. 이상현상

정답은 (3)이다.

이상현상에는 삽입 이상현상, 갱신 이상현상, 삭제 이상현상이 있다.

예를 들어 반정규화 상태의 테이블에 P004라는 냉장고 상품만 넣고 싶은 것이다.

그런데 고객ID, 고객명은 우리가 넣고 싶지 않은 데이터인데 넣어야 하는 것이다.

하지만 테이블이 뜯어져있었다면 상품 데이터만 넣을 수 있겠죠?

이러한 경우가 삽입 이상이다.

또는 만약에 드라이기의 가격을 바꾸고 싶다면 전부 다 바꿔주어야 한다.

이를 갱신 이상이라고 한다.

또는 노트북 정보를 삭제하고 싶다. 그런데 얘기치 못하게 고객의 정보까지 삭제가 되버리는 현상을 삭제 이상이라고 한다.

06. 3차 정규화

정답은 (4)이다.

1차 정규형 도메인 원자성: 속성에 하나의 값만 있어야 한다.

2차정규형 부분 종속성 제거: 컬럼에 PK 복합속성에서 부분적으로 종속되는 컬럼은 테이블을 나누어 주는 것이다.

3차 정규형 이행 종속성 제거: 

4차 정규화 다치종속성 제거:

5차 정규화 조인 속성 제거: 

07. 키 엔터티

정답은 (1)이다.

기본 엔터티 - 독립적 엔터티

중심 엔터티 - 계좌, 주문, 취소, 체결등의 엔터티이다. 기본 엔터티와 행위 엔터티의 중간이다.

행위 엔터티 - 주문이력, 체결 이력 등이 있다.

08. 파티션 처리

정답은 (1)이다.

09. 데이터 모델링 3단계(개념-논리-물리)

재사용성이 가장 높은 것은 바로 논리적 데이터 모델링이다.

IE/BARKER -> ERD -> CREATE문 

등으로 볼 수 있다.

설계는 논리적 데이터 모델링에서 대부분 설계가 되어야 한다. 가장 중요하고 시간도 오래 걸린다.

데이터를 쪼개면서 이상이 발생하지 않도록 정규화를 수행한다.

10. 

엔터티의 개념 자체가 집합이다.

그리고 요 하나 하나의 데이터를 인스턴스라고 했다.

집합을 의미하기 위해서는 무조건 두개 이상의 인스턴스가 있어야 한다.

인스턴스는 하나 이상의 속성을 가질 수 있다.

속성에는 하나의 속성값만 있어야 한다.

 

감사합니다.

728x90
반응형
LIST

+ Recent posts