관계 대수

기본 연산자

단항 연산자(unary operator)

  • 셀렉트
  • 프로젝트
  • 리네임

이항 연산자(binary operator)

  • 합집합
  • 차집합
  • 카티션 프로덕트

<참고. 그리스 소문자>

이름 소문자
시그마 σ (대문자는 Σ)
파이 π
ρ
세타 θ

단항 연산자

셀렉트

릴레이션에서 조건을 만족하는 레코드를 선택하는 것으로 시그마 기호로 표시한다.

σ조건(R)

σ번지=231(회원)

프로젝트 연산자

한 릴레이션의 여러 속성 중 특정 속성만 선택하는 것으로 파이 기호로 표시한다.

수학적인 관점에서 릴레이션은 집합이므로 프로젝트된 릴레이션에서 중복되는 레코드는 제거된다.

πA1,A2,...,An(R)

π주소,전화번호,소속(회원)

리네임 연산자

관계 대수식에서 결과로 생성된 릴레이션은 이름이 없어, 참조할 수 있는 이름을 부여해야 한다.

리네임 연산으로 그리스 소문자 로(ρ)를 사용한다.

<R을 x로 이름을 부여>

ρx(R)

ρcs번지=231(회원))

<R을 x로 이름을 부여하고 n개의 속성 이름까지 부여>

ρx(A1,A2,...,An)(R)

이항 연산자

집합 연산자

집합론을 이론적 배경으로 하는 릴레이션은 동일한 스키마를 만족하는 레코드의 집합이라고 할 수 있기 때문에 릴레이션에서 합집합, 교집합, 차집합 연산자를 동일하게 적용할 수 있다.

릴레이션은 호환 가능한 릴레이션간에 사용할 수 있으므로 집합 연산자를 사용하기 위해서는 아래 두 조건을 만족해야 한다.

집합 연산자를 사용하기 위한 두 릴레이션을 R과 S라 할때

  1. R과 S는 가지고 있는 속성의 수가 같아야 한다.
  2. 모든 i에 대해 릴레이션 R의 i번째 속성의 모데인과 릴레이션 S의 i번째 속성의 도메인이 서로 같아야 한다.
합집합 연산자

두 개의 릴레이션을 입력으로 받는 이항 연산자로, 두 릴레이션이 포함된 모든 레코드를 갖는 릴레이션을 결과값으로 가지며, 합집합 연산자 '∪'를 나타낸다.

π회원명(σ주소='서울'∧'성별='남')(회원) ∪ π회원명(σ주소='경기'∧'성별='남')(회원)

논리 접속자: ∨, ∧, ¬, ⊃, ≡

차집합 연산자

차집합 연산자는 한 릴레이션에는 포함되고 다른 릴레이션에는 포함되지 않는 레코드를 가지는 릴레이션을 결과값으로 가지며, '-'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) - π회원명(σ근무지='서울'∧'성별='남')(회원)

교집합 연산자

입력 받은 두 릴레이션에 동시에 포함되는 레코드들의 집합을 결과값으로 가지며, 교집합 연산자 '∩'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) ∩ π회원명(σ근무지='서울'∧'성별='남')(회원)

기본 연산자의 조합

R∩S=R-(R-S)

벤다이어그램으로 생각해 보면 쉽게 이해할 수 있다.

카티션 프로덕트 연산자

앞서 언급된 단항 연산자나 서로 양립 가능한 서로 다른 두 개의 릴레이션과 다르게

서로 다른 릴레이션 간의 관계성을 이용하는 연산자로 'x'로 표시된다.

카티션 프로덕트 연산자는 두 릴레이션의 레코드 간에 모든 조합을 취하는 연산이다.

RxS={(rs) | r∈R∧s∈S}

R릴레이션의 레코드가 4개이고 S릴레이션의 레코드가 4개이면 44=16개가 된다.*

조인 연산

카티션 프로덕트 연산과 다르게 두 릴레이션에서 서로 관련된 레코드만 결합하여 결과 집합에 포함시킨다.

σ회원.주소=사원.주소(회원x사원)

세타 조인

조인 연산 가운데 하나로 관계 연산자 'θ'로 정의되는 조인조건을 가진다.

A라는 속성을 갖는 릴레이션 R과 B라는 속성을 갖는 릴레이션 S에 대한 세타 조인(⋈AθB) 정의

R⋈AθBS=σAθB(RXS)

정의에서 θ는 관계연산자 {=,<,<=,>,>=,!=} 중에 하나가 된다.

θ가 '='이면 동등 조인 또는 이쿼 조인(equi join)이라 하며, 다음과 같이 표현할 수 있다.

회원⋈회원.주소=사원.주소사원

'database' 카테고리의 다른 글

관계 대수의 기본 연산자  (0) 2019.06.02
MariaDB(MySQL) 외부 접근 허용|금지하기  (0) 2019.05.09

MariaDB(MySQL) 외부 접근 허용|금지하기

개요

데이터베이스를 처음 설치하면 내부(localhost)에서만 접근이 가능합니다.
HeidiSQL과 같은 데이터베이스 관리툴에서 외부(카페24 가상서버)에 운영중인 데이터베이스에 연결하려면, 서버에 외부 접근에 필요한 설정이 필요합니다.

사용환경

외부 서버의 데이터베이스에 접근하기 위한 관문(조건)

  1. 방화벽 접근 정책 추가
  2. database의 접근 권한 부여
  3. mysqld의 Listen IP대역 변경

외부 접근 허용하기

방화벽 접근 정책 추가

방화벽을 운영중인 경우에만 해당합니다.

카페24 가상서버는 관리자 페이지에서 방화벽을 관리합니다.
방화벽이 활성화(on)되어 있다면 'Inbound 접근 정책'에 3306 포트를 추가합니다.

추가내용

  • 이름: mariadb
  • 프로토콜: tcp
  • 포트: 3306

아래와 같이 설정내용이 추가됩니다.

NO 이름 프로토콜 포트 접근허용 IP 접근 차단 IP 관리
3 mariadb tcp 3306 ANY [Rule 삭제] [차단IP추가]

database의 접근 권한

데이터베이스 사용 계정은 root 보다 '다른 계정'을 만들어 사용하는 것이 안전합니다.

  1. 외부 접근 계정을 추가합니다.

모든 IP에 대해 접근을 허용하기 위해 '%'를 사용했습니다.
특정 IP대역에 대해 허용하려면 '111.222.%'를 사용합니다.

CREATE USER 계정이름@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 계정이름@'%';
FLUSH PRIVILEGES;

마지막에 FLUSH PRIVILEGES는 현재 실행중인 세션에 변경 내용을 적용하기 위해 실행합니다.

  1. 확인

mysql에 로그인한 후 아래 명령어를 실행합니다.

mysql> SELECT Host,User,password FROM mysql.user;

mysqld의 Listen IP대역 변경

  1. 현재 상태를 확인한다.
$ netstat -ntlp | grep mysqld

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      19688/mysqld
  1. 원본 백업
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf_org
  1. Listen IP대역 변경
    이래 내용을 찾아 바꿔줍니다.

bind-address = 127.0.0.1 <= 수정 전
bind-address = 0.0.0.0 <= 수정 후

sudo vim /etc/mysql/my.cnf
bind-address        = 0.0.0.0
  1. mysql 재시동
$ sudo /etc/init.d/mysql restart
$ netstat -ntlp | grep mysqld

tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      19688/mysqld

외부 접근 금지

위에서 지정한 내용을 모두 해제합니다.

방화벽 접근 정책 삭제

Rule삭제 버튼으로 추가 했던 Inbound 접근 정책을 삭제합니다.

MariaDB 사용자 계정 삭제

외부 접근을 위해 추가된 계정이라면 해당 계정을 삭제합니다.

DELETE FROM mysql.user WHERE Host='%' AND User='계정이름';
FLUSH PRIVILEGES;

mysqld의 Listen IP대역 변경 취소

  1. 원본 복원
sudo cp /etc/mysql/my.cnf_org /etc/mysql/my.cnf

vim을 이용해 직접 수정해도 됩니다.

  1. mysql 재시동
$ sudo /etc/init.d/mysql restart
$ netstat -ntlp | grep mysqld

tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      19688/mysqld

참고

'database' 카테고리의 다른 글

관계 대수의 기본 연산자  (0) 2019.06.02
MariaDB(MySQL) 외부 접근 허용|금지하기  (0) 2019.05.09

+ Recent posts