본문 바로가기

반응형

CS

(20)
데이터베이스 설계와 정규화 데이터베이스를 설계하다 보면 어떻게 설계하는 것이 좋을지 고민해 본 적이 있을 것이다. 이번 시간에는 좋은 데이터베이스가 무엇인지 또 그것을 위한 가이드라인을 알아보고 정규화와 역정규화에 대해서도 알아보겠다. 글에 나오는 릴레이션은 테이블이라고 생각해도 된다. 좋은 데이터베이스 설계란? 좋은 데이터베이스를 설계하기 위해서는 아래 4가지 항목을 지키기 위해 노력해야 한다. 속성의 의미를 명확하게 표현하고 있어야 한다. 튜플의 중복값을 최소화하여야 한다. 튜플의 null 값도 최소화하여야 한다. 불필요한 튜플 생성 가능성을 허용해서는 안된다. 좋은 데이터베이스 스키마 설계를 위한 가이드라인 1) 하나의 엔티티 또는 릴레이션 타입에는 하나의 릴레이션 스키마를 설계해라! 하나의 스키마에 여러 개체나 관계 타임을..
SQL 집단함수와 GROUP BY 절, HAVING 절 정리 집단 함수 검색 결과의 합이나 개수 등 요약 정보를 제공하는 함수로 COUNT, SUM, MAX, MIN, AVG 가 있다. 집단 함수는 SELECT 절 만이 아닌 WHERE 절에도 올 수 있다. 일반적으로 집단 함수는 null 값은 제외하고 계산한다. 만약 전체가 null 이면 null 값을 돌려주지만 COUNT인 경우에는 0을 돌려준다. 사용 예시 1. 직원의 급여 합, 급여 최대값, 급여 최솟값, 급여 평균을 검색하라 SELECT SUM(Salary), Max(Salary), MIN(Salary), AVG(Salary) FROM EMPLOYEE; 2. 직원의 수를 검색하라 SELECT COUNT(*) FROM EMPLOYEE; 3. 급여 종류의 수를 검색하라 SELECT(DISTINCT Salary..
SQL 중첩 쿼리와 조인 쿼리 중첩 쿼리 SQL 문의 WHERE 절에 다른 SQL 문이 들어 간 질의문을 중첩 쿼리라고 한다. 외부 쿼리와 중첩 쿼리에 같은 이름의 애트리뷰트가 있다면 기본적으로 가장 가까운 애트리뷰트로 간주한다. 중첩 쿼리는 마치 루프를 도는 것 처럼 작동한다. 중첩 쿼리 안에서는 외부 쿼리의 필드는 마치 하나의 고정된 것 처럼 작동합니다. DELETE 문이나 UPDATE 문에 한 테이블이 아닌 여러 테이블에 대한 조건이 들어가야 하는 경우 중첩쿼리를 이용하면 된다. DELETE FROM EMPLOYEE WHERE Dno IN (SELECT Dnumber FROM DEPARTMENT WHERE Dname='Research'); 조인 쿼리 WHERE 절에 Join Condition을 넣는 대신에 FROM 절에 JOIN..
SQL 기본적인 질의어 정리 SELECT 문 테이블에서 특정 튜플들을 검색할 때 사용하는 질의어 입니다.. [기본 형태] SELECT FROM WHERE ; FROM -> WHERE -> SELECT 순서로 작동합니다. 대상 테이블을 찾고 특정 조건에 맞는 튜플들을 찾은 후 원하는 애트리뷰트를 추출합니다. WHERE 절을 생략하는 경우에는 FROM 절의 테이블들을 cartesian product한 결과를 보여줍니다. 테이블의 모든 애트리뷰트들을 검색하고 싶다면 * 을 사용하면 됩니다. SQL 에서 table은 꼭 집합이 필요가 없습니다. 중복을 허용합니다. 중복 제거를 위해 정렬이 필요한데 정렬 연산을 굉장히 비싼 연산이기 때문입니다. 유저가 중복을 원하는 경우도 있습니다. 집단 함수에소 중복을 제거해 버리면 결과가 달라져 버립니다..
SQL의 DDL문 정리 DDL 문 정리 DDL 이란 데이터 정의어로 간단히 말하면 테이블을 만들고 (CREATE) 삭제하고 (DROP) 수정하는 (ALTER) 역할을 하는 명령어를 말합니다. CREATE 명령어 테이블 또는 도메인을 생성하는 명령어입니다. CREATE TABLE EMPLOYEE -- 테이블 생성 CREATE DOMAIN SSN_TYPE AS CHAR(9) -- 도메인 생성 도메인을 정의하면 동일한 도메인을 갖는다는 것을 좀 더 명시적으로 표현해줄 수 있습니다. 하지만 시스템에 따라서 사용하지 못하는 경우도 있습니다. [CREATE 명령어 예시] CREATE TABLE EMPLOYEE ( FnameVARCHAR(15)NOT NULL, MinitCHAR, LnameVARCHAR(15)NOT NULL, SsnCHAR..
관계형 데이터 모델 정리 Relational Data Model 관계형 데이터 모델이란 릴레이션의 집합으로 된 데이터베이스를 말합니다. 여기서 릴레이션은 쉽게 말하면 표라고 할 수 있습니다. 릴레이션에는 행과 열이 있고 행을 구분하기 위한 식별자와 열을 구분하기 위한 애트리뷰트가 있습니다. 도메인 (Domain) : 도메인이란 애트리뷰트에 들어갈 수 있는 값의 범위를 말합니다. 릴레이션 스키마 (Relational Schema) : 릴레이션 구조를 간단히 보여주는 형식입니다. (테이블의 틀에 대한 정보) STUDENT(Name, Ssn, Home_phone, Addressm, Office_phone, Age, Gpa) 이런 형태를 하고 있습니다. 차수 (Degree) : 애트리튜트의 수를 말합니다. 위의 테이블은 7차 릴레이션입..
데드락 문제 (Deadlock Problem) Deadlock (교착상태) 두 개 이상의 프로세스나 스레드가 서로가 가진 자원을 기다리며 다음 일을 처리하지 못하는 상태를 말합니다. 프로세스 A와 B는 1번 자원과 2번 자원을 모두 획득해야 일을 끝낼 수 있는데 A는 1번을 B는 2번 자원을 각자 획득하고 상대방에게 할당된 자원을 무한정 기다리고 있다. Deadlock 발생의 4가지 조건 데드락은 아래의 4가지 조건이 모두 성립해야 발생한다. 따라서 아래 조건 중 하나라도 해결한다면 데드락 문제를 해결할 수 있다. Mutual Exclusion (상호배제) 자원은 한번에 하나의 프로세스만 사용할 수 있다. No preemption (비선점) 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 뺏을 수 없다. Hold and wait (점유 대기..
동기화 문제와 세마포어 동기화 문제 (Synchronization problem) 동기화 문제란 공유 데이터를 여러 프로세스나 스레드가 동시에 접근하여 연산하려 할 때 연산이 원자적으로 수행되지 않아 발생하는 문제입니다. 아래 예시를 통해 어떤 문제가 생기는 지 알아보겠습니다. (동기화란 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것) 위에 공유 자원 X 에 접근하는 두 스레드 A, B 가 있습니다. A 는 X 값을 하나 올리는 연산을 하고, B 는 X 를 하나 내리는 연산을 합니다. 실제 CPU 에서는 x= x + 1 연산이 한번에 이루어 지는 것이 아닌 다음과 같이 수행됩니다. 1. x를 레지스터에 로드한다 2. 레지스터에 데이터를 하나 올린다. 3. 다시 레지스터 값을 x에 저장한다. 스레드 ..
메모리 관리 기법, 페이징과 세그먼트 알아보기 프로세스가 실행되기 위해서는 우선 메모리에 프로세스가 로드 되어야 합니다 이때 메모리에 로드 되는 방식에 따라 크게 연속 할당 방식과 불연속 할당 방식이 있는데, 연속 할당 방식은 현재 많이 사용하고 있지 않기 때문에 간단하게 개념만 설명하고 불연속 할당 방식에 대해 자세히 살펴 보겠습니다. 연속 할당 VS 불연속 할당 연속 할당 연속 할당은 한 프로세스를 메모리 상에 연속적으로 할당하는 방식입니다. 따라서 MMU 만 있다면 간단하게 주소 변환이 가능합니다. 여기서 주소 변환이란 논리적인 주소를 물리적인 주소로 변환하는 과정을 말합니다. CPU 는 논리적인 주소를 바라보기 때문에 논리적인 주소를 물리적인 주소로 변경하는 과정이 필요합니다. 이때 사용되는 것이 MMU 라는 하드웨어 장치 입니다. (MMU에..
메모리 구조 이해하기 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리 로드되어야 합니다. 그럼 저희가 사용할 프로그램들을 전부 메모리에 로드시켜 놓을까요? 리눅스 기준으로는 프로세스 하나가 4GB 인데, 보통 우리가 사용하는 8GB, 16GB 메모리에 사용하고 싶은 프로그램들을 어떻게 전부 실행시킬 수 있죠? 가상 메모리 덕분입니다. 가상 메모리 가상 메모리란 메모리가 실제 메모리보다 더 많아 보이게 하는 기술입니다. 프로세스는 각각 고유의 가상 메모리 공간을 갖고 있고 이중 일부만을 실제 메모리에 올려 실행합니다. 따라서 메모리에는 실제 실행시킬 프로세스의 일부만을 올려 두기 때문에 동시에 많은 프로세스를 로드 시킬 수 있습니다. Logical address 가상 메모리에 접근하기 위한 주소로, CPU가 접근하는 주소입..

반응형