ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/SIsa-eobtim-ui-MacBookPro.local.pid)

 

Mac(맥)에서 homebrew를 사용해서 mysql을 설치했습니다.

설치 후에 mysql.server start 명령어를 입력 시 위의 에러가 발생했습니다.

 

1시간 정도를 방황하면서 재설치 해라 권한을 줘라 등등 다양한 해결방법이 있었지만 아래의 링크로 해결했습니다.

https://stackoverflow.com/questions/4963171/mysql-server-startup-error-the-server-quit-without-updating-pid-file/8137439

 

 

해결에 도움이 된 스택오버플로우 글

 

MySQL start 성공!

 

원인

  • 기존에 dmg로 MySql을 설치 했었는데, 해당 인스턴스가 종료가 안되었던 것 같습니다.
    => kill 명령어를 사용해서 해당 process 정지

 

느낀 점

  • 에러 해결은 스택오버플로우를 최우선으로 보고 해결하도록 시도해야겠습니다.
  • 문제에 대한 내용은 영어로 구글 서칭

 

 

 

 

 

 

 

반응형

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

  • 책[SQL Server 디비로 누리는 특별한 세상] (59 ~ 63페이지)

 

 

 

# 데이터베이스란?

 

데이터베이스는 데이터를 중앙에 저장하고 관리하여 여러 사용자가 공유할 수 있게 하려고 사용하는 '데이터 저장소'다.

공유가 필요하지 않다면 데이터를 워드나 엑셀과 같은 개별 파일로 관리해도 된다.

하지만 그 데이터에 대한 수정 사항이 생긴다면 각각 개별 파일을 따로따로 수정해줘야 한다.

 

 

 

 

# 데이터베이스를 사용하는 2가지 분야

 

OLTP(Online Transaction Processing) 데이터베이스

주로 트랜잭션 처리(우선 데이터 변경 처리로 이해하자)를 위한 용도로 사용하는 데이터베이스이다.

 

  • 데이터베이스의 테이블은 되도록 중복된 데이터를 제거하고, 빠르게 데이터를 변경할 수 있는 구조로 디자인
  • 이를 위해 SQL Server는 다수의 사용자가 데이터를 동시에 수정할 수 있도록 데이터베이스를 관리한다.
  • 우리가 일반적으로 데이터베이스라고 부르는 것은 대부분 OLTP 데이터베이스다.

 

 

OLAP(Online Analytical Processing) 데이터베이스

대량의 데이터를 체계화하고 요약하여, 데이터에 대한 빠른 평가와 분석을 목적으로 사용하는 데이터베이스

 

  • 이를 위해 SQL Server는 Analysis Services를 사용하여 빠른 의사 결정을 위한 데이터 분석을 가능하게 한다.
  • Reporting Services를 사용하여 손쉽게 보고서를 작성하고 조회할 수 있게 해준다.

 

 

 

 

 

 

# 시스템 데이터베이스

 

SQL Server를 설치하는 과정에서 SQL Server가 자체적으로 사용할 목적으로 자동으로 만드는 몇몇 테이터베이스를 '시스템 데이터베이스'라 한다.

 

 

 

master 데이터베이스

SQL Server가 수 많은 데이터베이스를 관리하기 위해서는 이들 데이터베이스에 대한 정보를 저장할 특변한 데이터베이스가 필요하다. 즉, 데이터베이스의 이름은 무엇이며, 데이터베이스와 관련된 데이터 파일과 로그 파일은 어느 폴더에 있으며, 데이터베이스에 접근하기 위해 서버에 로그인할 수 있는 계정은 무엇인지 등의 정보를 어딘가에 저장해야 한다.

이때 사용하는 데이터베이스가 'master' 데이터베이스다.

 

 

 

model 데이터베이스

'model' 이라는 단어에서 그 역할을 추측할 수 있듯이, 새로 만들어지는 데이터베이스의 원형으로 사용된다.

즉, model 데이터베이스를 복사해서 새로운 데이터베이스를 만든다.

 

  • model 데이터베이스 설정을 변경하면 이후에 만들어지는 새로운 데이터베이스에 그대로 반영된다.
  • CREATE DATABASE 문을 실행하면 model 데이터베이스의 내용을 복사하여 데이터베이스의 첫 번째 부분이 생성

 

 

tempdb 데이터베이스

SQL Server가 운영될 때 자동으로, 또는 사용자에 의해 만들어지는 임시 테이블들이 저장되는 곳이다.

물론 임시 테이블을 저장하는 것 외에도 여러 가지 역할을 담당한다.

 

tempdb 데이터베이스는 그 이름에 '임시' 의 뜻이 있어 중요한 것 같지 않지만,

절대 무실할 수 없는 중요한 시스템 데이터베이스다.

 

SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스 이고, 

사용자 개체, 내부 개체, 버전 저장소를 저장하는 데 사용한다.

 

 

 

tempdb 데이터베이스

주로 자동화와 관련된 정보를 저장할 때 msdb 데이터베이스를 사용한다.

SQL Server 에이전트 서비스가 제공하는 '작업(Jobs)', '경고(Alert)', '운영자(Operators)' 기능으로 유지관리 업무를 자동화 할 수 있는데, 이들과 관련된 정보를 msdb 데이터베이스에 저장한다.

 

이런 이유로 msdb 데이터베이스를 'SQL Server 에이전트 서비스가 사용하는 데이터베이스'라고 말하기도 한다.

 

 

 

resource 데이터베이스

SQL Server 운영과 관련된 시스템 개체를 모두 포함하고 있는 resource 데이터베이스가 있다.

하지만 읽기 전용의 숨겨진 데이터베이스여서 개체 탐색기에서는 보이지 않는다.

 

 

 

 

# 예제 데이터베이스

예제 데이터베이스는 SQL Server 기능을 익힐 때 사용하도록 제공되는 학습용 데이터베이스다.

학습 목적 외에는 SQL Server 운영과는 전혀 상관이 없다.

 

  • AdventureWorks 데이터베이스
    - OLTP용 애제 데이터베이스다.
    - AdventureWorksDW는 OLAP용 예제 데이터베이스다.
  • WideWorldImpoters 데이터베이스
    - SQL Server 2016버전부터 사용 가능한 새로운 예제 데이터베이스다.

 

 

# 사용자 데이터베이스

사용자가 데이터를 저장하기 위해 만든 데이터베이스가 사용자 데이터베이스다.

어떻게 보면 업무적으로 가장 중요한 데이터베이스라 할 수 있다.

반응형

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

  • 책[SQL Server 디비로 누리는 특별한 세상]

 

 

 

쿼리문이란? 

SQL Server가 뭔가를 하도록 지시할 때 사용하는 명령어를 쿼리(Query)문이라고 한다.

 

 

스크립트란?

여러 쿼리문이 모여있는 것을 스크립트(Scripts)라고 한다.

 

 

스크립트란 파일이란?

스크립트를 보관하거나 나중에 다시 할 목적으로, 별도 파일로 저장한 것을 스크립트 파일이라 한다.

 

 

 

  • "쿼리문을 저장하고 나중에 다시 열어 본다" 라는 말은
    "스크립트 파일로 저장하고 나중에 다시 열어 본다"라는 말과 같다.
  • 스크립트 파일은 확장자 sql을 갖는 텍스트 파일이다. 그래서 SSMS에서 작성해서 저장한 스크립트 파일을 메모장으로 열어 볼 수 있고, 그 반대로 메모장으로 작성한 스크립트 파일을 SSMS에서 열어 볼 수도 있다.

 

*SSMS는 Sever Management Studio라는 Sql Server관련 도구 중에서 가장 많이 사용하는 핵심 도구로, 개발과 운영에
사용하는 통합 도구이다. SQL Server와 관련된 대부분의 개발이나 운영 업무는 이 도구를 사용한다.

 

반응형

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

https://www.youtube.com/watch?v=AjhVRhVdtuY&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=9 

 

 

 

 

# SQL(Structured Query Language)

  • 1974년 IBM 연구소에서 개발한 SEQUEL에서 연유한다.
  • 관계 대수와 관계 해석을 기초로 한 고급 데이터 언어이다.

 

 

인터페이스

  1. 대화식 SQL
  2. 내장형 SQL

 

 

구성요소

  1. DDL (정의어)
  2. DML (조작어)
  3. DCL (제어어)

 

 

 

# DDL ( Data Definition Language)

  • DBMS에서 사용할 데이터베이스의 정의 및 변경을 위해서 사용하는 언어이다.
  • 외부 스키마 명세를 정의한다.
  • 스키마에 사용되는 제약 조건 명세를 정의한다.
  • 데이터베이스의 논리적 데이터 구조와 물리적 데이터 구조 및 구조 간의 사상을 정의한다.
  • DDl로 정의된 내용은 메타데이터(Metadata)가 되며, 시스템카탈로그에 저장된다.
  • 번역한 결과가 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러 개의 테이블로서 저장된다.
  • DDL의 명령어 종류: CREATE(정의), ALTER(변경), DROP(삭제)

 

 

시스템 카탈로그 (System Catalog)

  • 데이터베이스에 포함된 다양한 데이터 객체(기본 테이블, 뷰, 인덱스, 데이터베이스, 패키지, 접근 권한 등)에 대한
    정보들을 유지, 관리하기 위한 시스템 데이터베이스이다.
  • 데이터베이스에 포함되는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리한다.
  • DBMS가 스스로 생성하고, 유지하는 데이터베이스 내의 특별한 테이블의 집합체이다.
  • 데이터 사전(Data Dictionary)이라고도 한다.
  • 시스템 카탈로그에 저장된 정보를 메타 데이터(Meta Data)라고도 한다.

 

구분 역할
CREATE DOMAIN 도메인을 생성
TABLE 테이블(릴레이션) 생성
VIEW 뷰를 생성
INDEX 인덱스를 생성
ALTER TABLE 테이블 구조를 변경
DROP DOMAIN 도메인을 제거
TABLE 테이블을 제거
VIEW 뷰를 제거
INDEX 인덱스를 제거

 

 

 

Char(n)

  • character
  • 고정길이 문자열
  • 열 항목들이 크기가 일관적인 경우

 

 

varChar(n)

  • Characyer varying
  • 가변길이 문자열
  • 열 항목들이 크기가 일관적이지 않은 경우

 

 

CREATE TABLE

  • 테이블을 정의하는 명령문이다.
  • 표기 형식
CREATE TABLE 학생{
	학번 CHAR(15) NOT NULL,
    이름 VARCHAR(15) NOT NULL,
    학과 VARCHAR(20) NOT NULL,
    학년 INT NOT NULL,
    전화번호 CHAR(15) NOT NULL,
    성별 GENDER,
    생년월일 DATE,
    PRIMARY KEY(학번),
    UNIQUE(전화번호),
    FOREIGN KEY(학과) REFERENCES 학과(학과코드),
    ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT 학년제약 CHECK(학년 >= 1 AND 학년 <= 4));

 

* NO ACTION(=RESTRICT)

- 피참조 테이블에서 행(들)을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건을 위배하지 않으면 O.K.,

  무결성 제약조건을 위배하면 오류로 처리한다.

 

 

* CASCADE

- 피참조 테이블에서 행(들)을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 삭제 또는 수정을 행한다.

 

 

 * SET NULL

- 피참조 테이블에서 행(들)을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 NULL로 바꾼다.

단, NOT NULL 제약이 참조하는 칼럼에 선언되어 있다면 오류로 처리한다.

 

 

* SET DEFAULT

- 피참조 테이블에서 행(들)을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 default)으로 바꾼다.

만약, 참조 테이블의 외래 키가 default 값을 찾지 않으면 NULL 값을 default 값으로 한다. 단, default 값이 선언되어

있지 않으며 NOT NULL 제약이 참조하는 칼럼에 선언되어 있다면 오류로 처리한다.

 

 

ALTER

- 스키마, 도메인, 테이블, 뷰, 인덱스를 수정

 

* ALTER TABEL

- 테이블의 정의를 변경하는 명령문

 

 

DROP

- 스키마, 도메인, 테이블, 뷰, 인덱스를 삭제

* CASCADE: 삭제할 개체를 참조하는 다른 모든 개체를 함께 삭제

* RETRICT: 다른 개체가 삭제할 개체를 참조 중일 경우 삭제를 취소

 

 

 

 

# 데이터 제어어 [DCL, data control language]

  • 다수의 사용자가 데이터베이스를 공용하고 정확성을 유지하기위한 데이터 제어를 정의하고 기술하는 언어이다.
  • 데이터의 보안, 무결성, 회복과 밀접한 관련이 있다.
  • 불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안(Security)을 명세한다.
  • 데이터 정확성을 위한 무결성(Integrity)을 명세한다.
  • 시스템 장애에 대비한 데이터 회복(Recovery)과 병행 수행(Concurrency) 제어를 명세한다.

 

 

DCL의 종류

  1. COMMIT (무결성)
  2. ROLLBACK (무결성)
  3. RANT (보안)
  4. REVOKE (보안)

 

명령어 기능
COMMIT 정상적인 완료
ROLLBACK 비정상적인 종료
GRANT 사용권한 부여
REVOKE 사용권한 취소

 

 

* GRANT

- 사용자에게 해당 객체에 대한 특정 사용권한을 부여할 때 사용

- 권한 종류 : SELECT, INSERT, DELETE, UPDATE 등

 

 

* REVOKE

- 사용자에게 해당 객체에 대한 특정 사용권한을 취소할 때 사용

- 권한 종류: SELECT, INSERT, DELETE, UPDATE 등 

 

 

반응형

 

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

https://www.youtube.com/watch?v=h7AZAWfYH8k&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=8 

 

 

 

 

 

# 관계 데이터 연산

 

  • 데이터 모델은 구조와 제약을 정의해야 될 뿐 아니라, 데이터를 조작하기 위한 연산(operation)의
    정의도 포함해야 한ㄴ다.
  • 종류
    - 관계 대수(Relational Algebra)
    - 관계 해석(Relational Calculus)

 

 

# 관계 대수

  • 절차 언어(Procedural language)
  • 어떻게(How)의 관점
  • 릴레이션을 처리하기 위한 연산의 집합
  • 주어진 관계로부터 원하는 관계를 얻기 위해 연산자와 연산규칙을 제공하는 언어
  • 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적인 특성
  • 종류: 일반 집합 연산자, 순수 관계 연산자로 나뉜다.

 

 

 

# 일반 집합 연산자

 

  • 합집합(Union)
    - 두 릴레이션에 존재하는 튜플의 합집합을 구하는 연산결과 릴레이션에서 중복 튜플은 제거된다.

 

 

  • 교집합(Intersection)

 

 

  • 차집합(Difference)

 

 

 

  • 카티션 곱(CARTESIAN PRODUCT, X)

- 두 릴레이션에 정의된 튜플을 곱으로 계산하는 연산 A에 속한 각 튜플 a에 대해 B에 속한 튜플 b를 모두 접속시킨
  튜플들(a b)로 구성된 릴레이션

 

 

 

 

 

#  순수 관계 연산자

  1. SELECT
  2. PROJECT
  3. JOIN
  4. DIVISION

 

 

SELECT

  • 릴레이션에서 주어진 조건을 만족하는 튜플의 수평적 부분집합을 구하는 연산
  • 연산자 기호는 그리스 문자 시그마( σ )를 사용
  • 표기형식:   σ 조건(릴레이션명)

 

PROJECT

  • 릴레이션에서 주어진 속성리스트에 제시된 속성의 수직적 부분집합을 구하는 연산
  • 연산자 기호는 그리스 문자 파이( π )를 사용
  • 표기형식: π 속성리스트(릴레이션명)

 

JOIN

  1. Theta Join
  2. Equi Join
  3. Natural Join

https://satisfactoryplace.tistory.com/201

 

[Database] 관계대수 (Relational Algebra): 조인(JOIN), 외부 합집합(OUTER UNION)

세타조인, 동일조인, 자연조인, 세미조인, 외부조인에 대해 알아보자. 조인은 기본적으로 두 개의 릴레이션에 대해 진행하는 연산으로 이항 연산자이며, 양쪽 외부 조인을 제외한 모든 조인은

satisfactoryplace.tistory.com

 

  • 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 생성하는 연산
  • JOIN연산은 카티션 프로덕트 결과에서 SELECT 연산의 조건을 만족하는 것만 구한다.
  • 연산자 기호는 를 사용
  • 표기형식: R ⋈ R속성=S속성 S

 

 

 

DIVISION

  • 나누어지는 릴레이션이 나누는 릴레이션의 모든 내용을 포함한 것이 결과 릴레이션이 되는 연산
  • 연산자의 기호는 ÷ 를 사용
  • 표기형식: R R속성 ÷ S속성 S

 

#관계 해석

  • 비절자 언어(Nonprocedural language)
  • 무엇(What)의 관점
  • 튜플 관계 해석, 도메인 관계 해석으로 나뉜다.

 

 

 

 

 

 

 

 

 

반응형

 

 

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

https://www.youtube.com/watch?v=wEcpra-g8W8&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=7 

 

 

 

 

# 데이터베이스 설계 과정

 

  1. 요구조건 분석
    - 데이터 베이스에 저장할 내용을 정하기 위해 사용자의 요구사항 분석

  2. 개념적 설계
    - DBMS에 독립적인 개념 스키마 설계
    - ER다이어그램

  3. 논리적 설계
    - DBMS에 맞는 논리적 구조 설계
    - 정규화(스키마 정제)
    - 개념적 설계단계에서 바로 구현을 하면 문제 발생(이상 현상)
     * 삽입이상, 중복이상 등
  4. 물리적 설계
    - DBMS에 맞는 물리적 구조 설계
    - 데이터베이스의 성능을 끌어 올리는 단계(극대화)

  5. 구현
    - DDL(SQL 명령)로 실제 데이터베이스 구현

 

 

 

# 물리적 데이터베이스 모델링

 

  • 논리적 설계 단계를 거쳐 논리적 구조로 표현된 데이터를 물리 저장장치에저장할 수 있는
    물리적 구조로 변경해주는 단계
  • 실제로 데이터베이스를 생성하기 위한 저장구조접근경로의 설계
  • 예상빈도를 포함하여 데이터베이스 질의와 트랜잭션들을 분석
  • 사용하고자 하는 DBMS를 결정하고 해당 DBMS의 특성을 고려하여 진행

 

* 저장구조의 설계: 해당 데이터의 타입, 사이즈를 정한다.

* 질의: 쿼리

* 트랜잭션: 데이터베이스에 행해지는 연산(트랜잭션이란?)

 

 

 

 

# 물리적 DB 설계 시 고려사항

 

  1. 응답 시간의 최소화
  2. 저장 공간의 효율화
  3. 트랜잭션 처리도

 

 

 

# 물리적 DB 설계의 기능

 

  • 저장 레코드 양식 설계
    - 저장된 데이터의 유형(Type)과 크기(Size)

  • 레코드 집중의 분석 및 설계
    - 검색이 많이 일어지는 데이터는 가급적 모아서 관리(클러스터링)
  • 접근 경로 설계
  • 최적화 작업

 

 

# 반정규화(역정규화, De-normalization)

 

  • 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 기존 설계를 재구성
  • 반정규화를 수행하기 전에 각각의 엔터티타입과 속성, 관계에 대해 데이터의 정합성과 데이터의 무결성을
    우선으로 할지 데이터베이스 구성의 단순화와 성능을 우선으로 할지 결정해야 함
  • 업무분석을 통해 트랜잭션 처리도를 분석하여 사용량이 많아 시스템 성능에 크게 영향을 주는 테이블만
    선정하여 반정규화 진행

 

 

 

# 반정규화의 과정

 

  1. 반정규화 대상 조사
    - 범위처리 빈도수 조사
    - 테이블 조인 개수

  2. 다른 방법 검토
    - 뷰(View)테이블
    - 클러스터링 적용
    - 인덱스의 조정

  3. 반정규화 적용
    - 테이블 반정규화
    - 속성의 반정규화
    - 관계의 반정규화

 

 

 

# 상관 모델링

 

  • 업무 프로세스와 DB의 상관관계 모델링
  • 정보화 시스템을 구축하기 위하여 그 업무에 존재하는 무엇에 대해 무슨 일이 행해지고 있는지,
    무슨 일에 의해 무엇이 영향 받는지 분석하는 방법
  • 업무가 처리되는 과정에 따라 데이터가 어떻게 영향을 받고 있는지 분석하여 설계

 

 

 

# CRUD MATRIX

 

  • 단위 프로세스가 엔티티타입에 영향을 주는 방법으로 신규(Create), 조회(Read), 수정(Update), 삭제(Delete)의
    4가지 유형으로 업무가 진행되는 절차에 따른 데이터의 상관관계를 분석

 

*단위 프로세스: 업무 프로세스에서 하나의 일이 이뤄지는 단위
  ex) 회원가입, 회원탈퇴, 주문 등



단위프로세스\엔티티타입 고객 주문목록 주문 제품
신규고객이 등록 C      
제품을 주문 R C C R
주문량 변경   R U  
주문 취소   D D  

 

C = Create, R = Read, U = Update, D = Delete

 

 

단위 프로세스 테이블 컬럼 CRUD 트랜잭션 수
제품주문 고객 고객번호, 고객명 R 200
주문 주문번호, 주문일자, 고객번호 C 200
주문목록 주문번호, 제품번호, 단가 C 1000
제품 제품번호, 제품명, 재고량 R 1000

 

 

 

 

# TABLE 반정규화

 

TABLE 병합

  • 정규화 과정에 의해 분리 된 두 테이블에 많은 트랜잭션이 발생하여 JOIN 연산으로 인해 시스템 저하가 일어날 수
    있으므로 이런 경우 두 테이블을 병합

 

 

 

TABLE 분할(파티셔닝, Partitioning)

- 테이블을 분할하면 전체적인 스캔(Scan)범위가 축소되므로 한 테이블에서 접근하는 양이 감소

 

  1. TABLE의 수직적 분할(Vertical Partitioning)
    - 테이블에 속한 모든 속성을 사용하지 않고 특정 속성들만 집중적으로 사용하는 경우
    - 특정 속성에만 계속 트랜잭션이 발생하면 수직적 분할
    - 집중적으로 트랜잭션이 발생하는 속성을 따로 구성
  2. TABLE의 수평적 분할(Horizontal Partitioning)
    - 릴레이션 스키마는 동일하지만, 그 안에 들어있는 데이터값을 이용하는 방법이 행(ROW)별로 구분지어
      이용되는 경우 테이블을 행(ROW) 단위로 나누는 수평분할

 

 

# 컬럼(Column) 반정규화

 

중복 컬럼 방법

  • 자주 조인이 발생하는 컬럼이나 간단한 컬럼만 읽어도 되는데, 접근경로가 너무 복잡할 경우는 컬럼값을 
    더하여 또 하나의 컬럼을 만들어 테이블에 대한 읽기 성능을 향상
  • 해당 테이블에서 자주 사용하는 컬럼인 경우에 컬럼을 중복

 

파생 컬럼 추가

  • 필요에 의해 특정 속성값으로 만들어지는 파생 컬럼을 추가
공사번호 공사일자 공사비 공사비 누적
2015-001 2015년 1월 1일 7,500,000원 7,500,000원
2015-002 2015년 3월 5일 2,000,000원 9,500,000원
2015-003 2015년 10월 4일 9,721,239원 19,221,239원

 

 

 

# 뷰(View) 설계

 

  • 데이터베이스 사용자들이 접근하도록 테이블을 이용하여 만든 가상(Virtual)테이블
  • 복잡한 테이블 구조를 단순화
  • 다양한 관점에서 데이터를 제시 가능
  • 데이터의 보안 유지
  • 논리적인 데이터의 독립성 제공

 

* SQL문 예시

더보기

CREATE VIEW 주문목록(주문번호, 신청자명, 주문일자, 제품번호, 단가) AS
SELECT A.주문번호, A.신청자명, A.주문일자, B.제품번호, B.단가
FROM 주문 A, 주문목록 B
WHERE A.주문번호 = B.주문번호

 

 

주문 테이블

주문번호 신청자명 주문일자
A101 전지현 2005-9-28
A102 김태희 2005-10-30

 

 

주문 목록 테이블

주문번호 제품번호 단가
A101 B900 25,000원
A101 A100 50,000원
A102 C300 10,000원
A102 D400 30,000원

 

사용자에게 보여지는 뷰

주문번호 신청자명 주문일자 제품번호 단가
A101 전지현 2005-9-28 B900 25,000원
A101 전지현 2005-9-28 A100 50,000원
A102 김태희 2005-10-30 C300 10,000원
A102 김태희 2005-10-30 D400 30,000원
  • 실제로 이렇게 저장된 테이블은 없다.
  • 가상 테이블 뷰라고 부른다
  • 사용자 입장에서 보여지는 데이터베이스의 구조

 

 

 

 

 

# 인덱스(INDEX) 설계

 

인덱스(INDEX)란?

  • 데이터베이스에서 원하는 데이터를 좀더 빨리 찾아줄 수 있도록 데이터의 위치정보를 모아놓은 개체
  • 항상 정렬되어 있는 상태로 유지
  • 시스템의 성능 향상을 가져올 수 있음
  • 인덱스에 사용 할 컬럼은 수정이 자주 발생되는 컬럼을 선정
  • 데이터의 입력, 수정, 삭제가 많이 발생하면 데이터 영역뿐만 아니라 인덱스에 있는 정보도 DBMS에서 수정해야
    하므로 시간과 자원이 더 소모

 

 

데이터검색

  1. FTS(Full Table Scan)
    - 전체 데이터를 쭉 읽어서 찾는 방법
    - 모든 테이블을 읽어서 찾는 방법
    - 많은 데이터를 찾을 때 효율적이다

  2. INDEX SCAN
    - 전체 데이터 중 하나를 찾는 다면 인덱스 스캔이 효율적이다

 

 

클러스터드 인덱스(Index)

  • 클러스터드 인덱스가 생성되는 컬럼을 기준으로 데이터 페이지에 저장된 데이터를 물리적으로 정렬
  • 기본적으로 넌 클러스터드 인덱스보다 검색 속도가 빠르며 특히 범위 조회(Range Query)를
    할 경우 속도가 빠름
  • 한 테이블에 하나의 클러스터드 인덱스만 생성 가능
  • 기본키를 만들면 기본적으로 기본키에 클러스터드 인덱스가 만들어짐

 

 

넌 클러스터드 인덱스(Index)

  • 데이터 페이지의 데이터 그대로의 위치 정보를 인덱스로 구성
  • 리프 레벨은 정렬된 상태로 관리되며 하위 데이터 페이지에 대한 포인터 정보를 갖는다.
  • 상위 레벨들은 하위 인덱스 페이지들의 첫번째 레코드에 대한 정보를 관리
  • 데이터 페이지와는 별도로 인덱스 페이지가 생성
  • 클러스터드 인덱스보다 검색 속도가 느리며 범위 조회(Range Query)를 할 경우 거의
    인덱스의 도움을 받을 수 없음

 

 

데이터를 조회할 때

 

  • 클러스터드 인덱스: 루트 => 리프
  • 넌 클러스터드 인덱스: 루트 => 리프 => 데이터 페이지
    - 클러스터드 인덱스보다는 넌 클러스터드 인덱스가 더 많은 공간을 차지한다.
    - 클러스터드 인덱스의 추가 필요 공간은 테이블 크기의 5 ~ 10% 정도 넌 클러스터드 인덱스의 추가 필요
      공간은 테이블 크기의 10 ~ 20% 정도이다.

 

 

 

 

# 선택성(Selectivity)

 

  • Data의 종류의 수와 실제 입력된 데이터 수의 비율, 즉 선택될 수 있는 빈도
  • 예를 들어서 1000건의 데이터가 들어 있는 컬럼에서 유일한 값을 반환하는 경우에는 선택성이 0.1%이며,
    이러한 경우에는 선택성이 너무 낮기 때문에, 인덱스를 지정하지 않는 것이 좋다.
  • 반대로 선택성이 너무 높은 경웅에도 인덱스를 지정하지 않는 것이 좋다. 
    (만약 성별에 대해서 인덱스를 지정하는 것 역시, 성능향상에는 도움이 되지 않음)
  • 주로 선택성이 5% 정도로 이루어지는 컬럼에 인덱스를 지정하는 것이 일반적이다.

 

 

반응형

 

 

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

https://www.youtube.com/watch?v=RXQ1kZ_JHqg&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=6 

 

 

 

 

# 논리적 데이터베이스 설계

 

1. ER 스키마 --> 관계스키마로 사상

 

 

2. 효율적인 데이터베이스 스키마 구축

 

 정규화(Normalization)

  • 키, 무결성의 개념 이해
  • 이상현상 이해
  • 함수적 종속성 이해
  • 정규화 과정 이해

 

 

* 비정규 릴레이션  → 정규화된 릴레이션

 

 

 

# 정규화의 목적

 

  • 데이터 구조의 안정성을 최대화시킨다.
  • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다.
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하도록 한다.
  • 데이터 삽입 시 릴레이션을 재구성 할 필요성을 줄인다.
  • 효과적인 검색 알고리즘을 생성한다.

 

 

 

 

# 제 1 정규형(1NF)

  • 릴레이션에 속한 모든 도메인이 원자값(Atomic Value)
  • 모든 속성에 입력되는 값들을 원자값을 가져야 한다.

 

 

 

 

"중복되는 항목이 없다"에 대한 정의는 학자마다 주장이 조금씩 달라서, 1NF를 만족하는 테이블에 대해서의 정확한 정의는 없다. 대부분의 학자들(에드거 F. 커드, Ramez Elmasri, Shamkant B. Navathe[3])은 1NF를 만족하는 테이블은 관계 값을 가지는 항목(테이블 내 테이블)을 허용하지 않으나, 일부 학자들(크리스토퍼 J. 데이트 등)은 이를 허용하기도 한다.

 

 

 

# 크리스토퍼 J. 데이트의 1정규형의 정의

 

  1. 열에는 위 - 아래의 순서가 없다.
  2. 행에는 좌 - 우의 순서가 없다.
  3. 중복되는 열이 없다.
  4. 모든 열과 행의 중복지점에는 (열과 행의) 해당되는 분야에서 한 개의 값을 가진다.
  5. 모든 행은 규칙적이다.

 

 

# 제 2 정규형(2NF)

 

- 키가 아닌 모든 속성들이 기본키에 완전 함수 종속

 

 

 

 

# 제 3 정규형(3NF)

 

- 키가 아닌 모든 속성들이 기본키에 이행적으로 함수 종속 되지 않은 릴레이션

 

 

 

 

# 무손실 분해(Lossless Decomposition)

  • 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있다.
  • 여기서 손실이란 정보의 손실을 뜻한다.
  • 정보의 손실을 원래의 릴레이션을 분해한 후에 생성된 릴레이션들을 조인한 결과에 들어 있는
    정보가 원래의 릴레이션에 들어 있는 정보보다 적거나 많은 것을 포함한다.

 

 

 

반응형

 

아래 글은 WPF 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

https://www.youtube.com/watch?v=-bLCtP2HNHo&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=5 

 

 

 

 

 

# 논리적 데이터베이스 설계

 

 

1. ER 스키마 ▶ 관계 스키마로 사상

  • ER 스키마는 개념적 설계 단계
  • 사상은 영어로 Mapping
  • 논리적 단계에서는 ER스키마를 좀 더 효율적인 구조로 다듬는다(정제).

 

 

2. 효율적인 데이터베이스 스키마 구축

  • 정규화 (Normalization)
    - 키, 무결성의 개념 이해
    - 이상현상 이해
    - 함수적 종속성 이해
    - 정규화 과정 이해

* 정규화란 테이블을 분해(쪼개는)하는 단계

 

 

 

# 이상(Anomaly)

 

 

개념적설계 단계

  • 뭐 단계에서 정제 단계를 거치지 않으면 이상현상 발생
  • 잘못된 구조의 테이블을 그대로 사용했기 때문에 발생
  • 데이터 중복으로 인해 릴레이션 조작 시 예상하지 못한 곤란한 현상이 발생
  • 이상은 속성들 간에 존재하는 여러 종류의 종속 관계를 하나의 릴레이션에
    표현 할 때 발생

 

# 이상의 3가지 종류

 

  1. 삽입 이상(Insertion Anomaly)
  2. 삭제 이상(Deletion Anomaly)
  3. 갱신 이상(Updating Anomaly)


 

# 함수 종속(Functional Dependency)

 

  • 테이블 안에 있는 속성과 속성 사이의 관계
  • X이면 Y이다 ( X -> Y)
    * X가 Y를 결정한다.

  • X는 결정자(Determminant), Y는 종속자(Dependent)

    ex) 주민등록번호 입력 시 이름 출력


학번 성명 주민등록번호 학과
100 홍길동 930101 - 1111111 전기
200 이순신 920101 - 1212121 기계
300 강감찬 900101 - 1212121 컴퓨터

 

- 여기서 학번은 X(결정자)가 된다.

- 기본키는 기본적으로 결정자가 된다.

- 학번으로 모든 속성을 결정 할 수 있다.

 

 

 

 

# 함수 종속(Functional Dependency)

 

  1. 완전 함수적 종속
  2. 부분 함수적 종속
  3. 이행 함수적 종속
  4. 다치 종속
  5. 조인 종속

 

 

 

반응형

 

 

아래 글은 WPF 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

📃 참고자료

 

 

https://www.youtube.com/watch?v=K3YxdmHj4sg&list=PLimVTOIIZt2aP6msQIw0011mfVP-oJGab&index=5 

 

 

 

 

# 키 (Key)

 

  • 주어진 릴레이션에서 모든 인스턴스 가운데 유일함(Unique)을 보장해 주는 하나 이상의
    애트리뷰트의 집합이다.

    * 복합키: 하나 이상의 속성을 묶어서 키를 구성
      ex) 같은 이름의 학생이 있으면 다른 속성을 묶어서 키 구성
  • 튜플을 유일하게 식별할 수 있는 속성 집합
    튜플을 검색하거나 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 속성

 

 

# 유일성 (Unique)

 

  •  오직 하나의 값만 가지는 것

 

 

 

# 최소성 (Minimality)

 

  • 최소한의 속성으로 한놈을 찾아내야 한다.
  • 하나의 속성(ex. 학번)으로 학생을 찾을 수 있는데 불필요한 속성 값을 추가하는 것은
    최소성에 위배되는 행위

 

# 후보키 (Candidate Key)

 

  • 튜플을 유일하게 구분 할 수 있는 최소 슈퍼키
    한 릴레이션에서 유일성과 최소성을 모두 만족

    ex) 학번, 주민등록번호

 

# 기본키 (Primary Key)

 

  • 후보키 중에서 대표로 지정된 키 중복값이나 널 값을 가질 수 없음.
  • 주키, 주식별자 라고도 함.

 

* NULL 이란?

 

  • 집합으로 따지면 공집합
  • 정보 부제
  • 아무 값도 입력되지 않은 상태

 

 

 

 

# 대체키 (Alternate Key)

 

  • 후보키 중에서 기본키를 제외한 나머지 후보키
  • 후보키 - 기본키 = 대체키
  • 보조키 라고도 함.

 

 

# 외래키 (Foreign Key)

 

  • 외래키는 테이블과 테이블을 연결해주는 징검다리 역할 수행
  • 외래키가 포함된 테이블을 자식 테이블이라하고 외래키 값을 제공하는 테이블을 부모 테이블이라 한다.

 

 

 

 

# 무결성 제약 (Integrity Constraint)

 

- 데이터 정확성ㅇ을 유지하기 위해 제약조건을 건다

 

 

* 개체 무결성 제약

  • 한 릴레이션의 기본키를 구성하는 어떠한 속성 값도 널(NULL)이나 중복 값을 가질 수 없다.
  • 하나의 테이블 안에서 이루어진다.

 

* 참조 무결성 제약

  • 외래키와 관련 있음
  • 하나의 릴레이션과 다른 릴레이션이 서로 관계를 가질 때 발생하는 문제를 제약
  • 외래키는 null 혹은 중복된 값이 와도 상관 없다.

 

* 도메인 무결성 제약

  • 주어진 속성의 값이 도메인에 속한 값이어야 함
반응형

 

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

📃 참고자료

 

 

https://www.youtube.com/watch?v=jTbdUuYJDIM 

 

 

 

 

 

* Relation과 Table의 차이

 

https://5dol.tistory.com/17

 

Relation과 Table의 차이

데이터베이스 관련 책을 읽다보면 Relation과 Table을 같은 용어로 이야기하는 경우가 있다. 어떤 책의 경우 "릴레이션이 테이블이다." 라고 되어있다. 하지만 사실상 릴레이션은 테이블과는 약간

5dol.tistory.com

 

 

 

 

 

* 튜플(Tuple) = Row

 

  • 릴레이션을 구성하는 각각의 행 속성 값들의 집합으로 구성
  • 하나의 행을 튜플이라고 함
    * 그 행에 입력되어 있는 값 자체가 인스턴스

 

* 카디널리티(Cardinality)

 

- 테이블에 입력되어 있는 현재 튜플의 수

 

 

 

* 차수(Degree)

 

- 속성(Column)의 수

 

 

* 도메인(Domain)

 

  • 속성이 취할 수 있는 같은 타입의 원자값들의 집합
  • 정의된 속성은 반드시 해당 도메인 내의 값을 취함
  • 그 속성에 입력 될 수 있는 값의 범위

 

 

* 릴레이션의 특성

 

 

  • 한 릴레이션에 포함된 튜플들은 모두 상이하다.
  • 한 릴레이션에 포함된 튜플 사이에는 순서가 없다.
    * 튜플들의 순서는 아무 의미 없다.

  • 한 릴레이션을 구성하는 속성의 이름은 유일해야 한다.
  • 한 릴레이션을 구성하는 속성 사이에는 순서가 없다.
  • 모든 속성값은 논리적으로 더이상 분해 할 수 없는 값인 원자값이어야 한다.
반응형

+ Recent posts