관계형 데이터베이스 이론. 관계형 데이터베이스 이론: 정규화, 관계 및 조인. 러시아 연방 교육과학부

주석: 이번 강의와 다음 두 강의에서는 관계형 데이터베이스 이론을 다룹니다. 데이터베이스 구성에 대한 전체 관계형 접근 방식은 순전히 실용적이므로 이 이론은 주로 실용적입니다. 관계형 데이터베이스 이론이 해결하려는 주요 문제는 특정 데이터베이스 스키마의 유용한 속성을 발견하고 그러한 스키마를 구성하는 방법을 개발하는 것입니다. 이 문제는 일반적으로 간단히 관계형 데이터베이스 설계 문제라고 합니다.

소개

실용적인 지향에도 불구하고, 관계형 데이터베이스 이론는 많은 유명 연구자들이 연구해 온 (그리고 계속해서 연구하고 있는) 독립적인 과학 분야입니다. 우리 강의에는 그 이름이 나올 것입니다. 본 과정에서는 해당 분야의 주요 결과를 자세히 설명할 계획이 없었습니다. 우리의 목표는 프로세스의 일반적인 이해에 필요한 정의와 설명만을 제공하는 것입니다. 관계형 데이터베이스 디자인정규화를 기반으로 합니다.

실용적인 관점에서 볼 때 관계형 데이터베이스의 가장 중요한 속성은 개념을 기반으로 하기 때문입니다. 기능적 의존성, 별도의 강의에서 관련 이론적 문제에 대한 간략한 논의를 포함시켰습니다. 이러한 질문 중에는 종결 및 기능적 종속성을 다루는 세트, 암스트롱의 공리그리고 충분조건에 관한 히스의 정리 무손실 관계 분해. 이 강의의 개념과 설명은 강의 7의 내용을 익히는 데 실제로 필요하지만 간단한 예를 통해 독자에게 강의 내용을 보여 주려고 노력했습니다. 관계형 데이터베이스 이론, 복잡성 수준은 얼마이며 얼마나 직관적입니까?

우리는 이론적인 자료를 분리하지 않았다는 점에 유의하십시오. 다중값 종속성그리고 연결 종속성. 이는 두 가지 이유로 수행되었습니다. 첫째, 이러한 유형의 종속성은 모델링에서 덜 일반적입니다. 대상 지역데이터베이스를 사용합니다. 따라서 우리는 8강에서 관련 이론자료의 기초만을 제시하는 것으로 충분하다고 생각하였다. 둘째, 비록 이론은 다중값 종속성그리고 연결 종속성, 실제로 이론보다 훨씬 복잡하지는 않습니다. 기능적 종속성, 정의와 설명이 이 과정에서는 너무 번거롭습니다.

기능적 종속성

실용적인 관점에서 가장 중요한 것은 정상적인 관계의 형태기본을 바탕으로 하고 있습니다 관계형 데이터베이스 이론개념 기능적 의존성. 추가 프레젠테이션을 위해서는 몇 가지 정의와 설명이 필요합니다(진행하면서 이에 대해 설명하고 설명하겠습니다).

일반 정의

주어지게 하라 관계변수 r , X 및 Y 는 r 헤더("복합" 특성)의 임의 하위 집합입니다.

의미에서 관계변수아르 자형 속성 Y는 기능적으로 속성 X에 종속됩니다. X의 각 값이 Y의 정확히 하나의 값에 해당하는 경우에만 가능합니다. 이 경우 속성 X라고도 합니다. 기능적으로 정의속성 Y(X는 행렬식( 결정자)는 Y에 대해, Y는 X에 종속됩니다). 이를 r.X->r.Y 로 표시하겠습니다.

예를 들어 다음 관계식을 사용하겠습니다. EMPLOYEE_PROJECTS(SLUN_NOM, SLU_NAME, SLU_ZARP, PRO_NOM, PROJECT_RUK)(그림 6.1). 분명히 SLU_NOM이 관계의 기본 키직원 여러분, 그렇다면 이 관계는 공평합니다 기능적 의존성(FD) SLN_NAME->SERV_NAME.

사실 관계의 몸을 위해서 EMPLOYEES_PROJECTS그림에 표시된 형태로 표시됩니다. 6.1에서는 다음 FD(1)도 실행됩니다.


쌀. 6.1.

SLUN_NOM->SLUN_NAME SLUN_NOM->SLUN_ZARP SLU_NOM->PRO_NOM SLUN_NOM->PROJECT_RUK(SLUN_NAME, SLU_NAME)->SLUN_ZARP(SLUN_NAME, SLUN_NAME)->PRO_NOM(SLUN_NOM, SLUN_NAME)->(SLUN_ZARP, PRO_NAME) … PRO_NOM ->PROJECT_RUK 케이와 등.

모든 직원의 이름이 다르기 때문에 다음 FD(2)도 충족됩니다.

SERV_NAME->SERV_NAME SER_NAME->SLU_ZARP SER_NAME->PRO_NAME 등

게다가, 그림 1의 예를 들어보자. 6.1이 만족되고 FD(3)은 다음과 같습니다.

SLU_ZARP->PRO_NOM

그러나 FD 그룹 (1)의 성격은 FD 그룹 (2) 및 (3)의 성격과 다르다는 점에 유의하십시오. 직원 식별 번호는 항상 달라야 하며 각 프로젝트에는 관리자가 한 명만 있다고 가정하는 것이 논리적입니다. 따라서 그룹 (1)의 FD는 유효한 값에 대해 참이어야 합니다. 관계변수 EMPLOYEES_PROJECTS그리고 다음과 같이 간주될 수 있다 불변성, 또는 무결성 제약이것 관계변수.

그룹 FD(2)는 모든 직원이 서로 다른 이름을 가지고 있다는 덜 자연스러운 가정을 기반으로 합니다. 이는 그림 1의 예에서도 마찬가지입니다. 6.1이지만 시간이 지남에 따라 FD 그룹(2)이 어떤 값에도 만족되지 않을 가능성이 있습니다. 관계변수 EMPLOYEES_PROJECTS.

마지막으로, 그룹 (3)의 FD는 서로 다른 프로젝트에 참여하는 두 명의 직원이 동일한 급여를 받지 않는다는 매우 부자연스러운 가정에 기반을 두고 있습니다. 다시 말하지만, 이 가정은 그림 1의 예에도 적용됩니다. 6.1이지만 이는 우연일 가능성이 높습니다.

앞으로 우리는 그런 것에만 관심을 가질 것이다. 기능적 종속성, 가능한 모든 값을 만족해야 함 관계 변수.

관계 r의 속성 A가 가능한 키인 경우 이 관계의 모든 속성 B에 대해 항상 유지됩니다.

델파이 6 환경에서의 프로그래밍

데이터 베이스. Word를 사용하여 보고서를 만듭니다.

편집출판위원회의 승인

실험실 작업장으로서의 대학

보로네시 2004


UDC 681.3

Vorobyov E.I., Korotkevich D.E.. Delphi 6 환경 프로그래밍: 실험실 워크숍: 2부: 데이터베이스. Word를 사용하여 보고서를 만듭니다. 스트림. 보로네시: 보로네시. 상태 기술. 대학, 2004. 107 p.

실험실 워크숍의 두 번째 부분에서는 "데이터베이스 설계, Word에서 보고서 생성 및 고성능 애플리케이션 생성 시 스레드 사용"이라는 주제로 Delphi 6 환경에서 프로그램 작성에 대한 이론적이고 실용적인 정보를 논의합니다.

이 간행물은 230100 "정보학 및 컴퓨터 과학", 전문 분야 230104 "컴퓨터 지원 설계 시스템", "고급 언어 프로그래밍" 분야의 고등 전문 교육에 대한 주 교육 표준 요구 사항을 충족합니다.

테이블 3. 일. 19. 참고문헌: 7제목.

과학 편집자: Dr. Tech. 과학, 교수. 예.E. 르보비치

검토자: Voronezh Forestry Academy 컴퓨터 과학부(학과장, 기술 과학 박사, V.E. Mezhov 교수);

테크 박사. 과학, 교수. O.Yu.Makarov

© Vorobyov E.I., Korotkevich D.E., 2004

© 디자인. 보로네시주

기술대학교, 2004


소개

데이터베이스 개념

데이터베이스는 Delphi의 주요 장점으로 간주됩니다. 데이터베이스 작업을 위한 특수 언어(예: MS Visual FoxPro)도 이러한 유형의 애플리케이션에 대한 단순성과 프로그래밍 능력 측면에서 분명히 열등합니다. 델파이는 모든 복잡성을 숨기는 동시에 가장 큰 힘을 제공합니다. 단시간에 델파이에서 구현하지 못한 작업은 단 한번도 없었습니다. 그리고 가장 중요한 것은 이 모든 것이 매우 편리하고 이해하기 쉽게 구현된다는 것입니다. Delphi에서는 복잡한 데이터베이스라도 코드 한 줄 없이 간단한 애플리케이션을 만들 수 있습니다. 이 튜토리얼에서는 로컬 데이터베이스 작업 기술을 익히기 위한 실험실 작업을 다룹니다.

관계형 데이터베이스 이론

10년 전만 해도 데이터베이스 프로그래밍은 매우 어려운 작업이었습니다. 요즘에는 델파이 덕분에 프로그램 작성 과정이 단순화되었고 데이터베이스 종류도 이미 수십 가지에 달해 상상하기 어렵습니다.

데이터베이스는 로컬(프로그램이 실행되는 클라이언트 컴퓨터에 설치됨)과 원격(서버에 설치되어 원격 컴퓨터)으로 구분됩니다. 서버 데이터베이스는 원격 컴퓨터에 있으며 서버 소프트웨어의 제어하에 실행됩니다. 주요 장점은 여러 사용자가 동시에 하나의 데이터베이스로 작업할 수 있고 동시에 네트워크 부하가 최소화된다는 점입니다. 네트워크에 너무 많은 부하를 발생시키고 프로그래머와 최종 사용자 모두가 사용하기 불편한 네트워크 데이터베이스도 있습니다. 프로그램이 네트워크 데이터베이스에 연결되면 서버에서 거의 전체 복사본을 다운로드합니다. 변경한 경우 복사본이 완전히 다시 다운로드됩니다. 이는 과도한 데이터 전송으로 인해 네트워크에 큰 부하가 발생하기 때문에 매우 불편합니다. 클라이언트-서버 기술에서 클라이언트 프로그램은 일부 데이터를 받기 위해 서버에 간단한 텍스트 요청을 보냅니다. 서버는 이를 처리하고 필요한 데이터 부분만 반환합니다. 일부 데이터를 변경해야 할 경우 이를 변경하라는 요청이 다시 서버로 전송되고, 서버는 데이터베이스의 데이터를 변경합니다. 따라서 주로 텍스트 요청만 네트워크를 통해 전송되며 일반적으로 1KB 미만을 차지합니다. 모든 데이터는 서버에서 처리됩니다. 즉, 클라이언트 시스템의 로드가 훨씬 적고 리소스를 많이 요구하지 않습니다. 서버는 가장 필요한 데이터만 클라이언트에 전송합니다. 즉, 전체 데이터베이스 사본을 불필요하게 다운로드할 필요가 없습니다. 이 모든 덕분에 네트워크 데이터베이스는 이미 구식이며 실제로 사용되지 않습니다. 클라이언트-서버 기술로 거의 완전히 대체되었습니다. 그러나 로컬 데이터베이스는 항상 살아 있습니다. 저장소 형식이 변경되거나 일부 새로운 기능이 추가될 수 있지만 데이터베이스 자체는 존재합니다. 더 자세히 고려하려면 새로운 개념을 정의해야 합니다. 테이블. 지금까지는 일반적인 원리만 논의하였으므로 일반적인 개념을 사용하였다. 데이터베이스. 데이터베이스 테이블은 데이터가 열로 배열된 2차원 배열과 같습니다(테이블의 대표적인 예는 Excel입니다). 데이터베이스는 대략적으로 말하면 하나에서 여러 테이블까지 저장할 수 있는 파일입니다. 대부분의 로컬 데이터베이스는 하나의 테이블(dBase, Paradox, XML)만 저장할 수 있습니다. 그러나 여러 테이블이 하나의 파일에 포함되어 있는 로컬 데이터베이스의 대표자가 있습니다(예: Access).

로컬 데이터베이스

로컬 데이터베이스 중에서 가장 일반적인 것으로 관계형 데이터베이스를 고려해 보겠습니다. 관계형 데이터베이스란 무엇입니까? 컬럼은 그 안에 저장된 데이터의 이름이고, 각 행은 데이터 자체를 저장하는 테이블입니다. 데이터베이스 테이블은 Excel 스프레드시트와 유사합니다(더 정확하게 말하면 Excel은 데이터베이스 기술을 기반으로 하는 독점 형식으로 데이터를 저장합니다). 로컬 데이터베이스 테이블은 로컬 하드 드라이브에 저장하거나 파일 서버의 네트워크 드라이브에 중앙 집중식으로 저장할 수 있습니다. 데이터베이스 테이블 자체가 특정 위치에 연결되어 있지 않기 때문에 이러한 파일은 다른 파일과 마찬가지로 표준 도구를 사용하여 복사할 수 있습니다. 가장 중요한 것은 프로그램이 테이블을 찾을 수 있다는 것입니다. 각 테이블에는 행을 고유하게 식별하는 하나의 고유 필드가 있어야 합니다. 이 필드를 키 필드라고 합니다. 이러한 필드는 여러 테이블을 함께 연결하는 데 매우 자주 사용됩니다. 그러나 테이블이 관련되어 있지 않더라도 키 필드는 여전히 필요합니다. 숫자 유형을 키로 사용하는 것이 좋으며, 데이터베이스가 허용하는 경우 "자동 증가" 유형(숫자 또는 카운터가 자동으로 증가/감소)인 것이 더 좋습니다. 데이터베이스 테이블의 열 이름도 고유해야 하지만 이 경우 반드시 숫자일 필요는 없습니다. 독특하고 이해하기 쉬운 한 원하는대로 부를 수 있습니다. 각 열(데이터베이스 필드)에는 특정 유형이 있어야 합니다. 유형의 수와 종류는 데이터베이스 유형에 따라 다릅니다. 예를 들어 dBASE 형식(DBF 확장자를 가진 파일)은 6가지 유형만 지원하고 Paradox는 이미 최대 15가지 유형을 지원합니다. 데이터베이스는 하나의 파일(Access ) 또는 여러 가지(Paradox, dBase). 보다 정확하게는 테이블 데이터는 항상 하나의 파일에 저장되지만 추가 정보는 별도의 파일에 저장될 수 있습니다. 추가 정보에는 특정 필드에 대한 색인, 제약 조건 또는 기본값 목록이 포함될 수 있습니다. 파일 중 하나 이상이 손상되거나 삭제되면 해당 데이터를 편집할 수 없게 될 수 있습니다.

무슨 일이야? 지수? 테이블의 데이터는 일종의 변경을 겪는 경우가 많으므로 행을 편집하기 전에 해당 데이터를 찾아야 합니다. 참고 도서로 사용되는 정적 테이블도 요청된 데이터를 표시하기 전에 검색 작업을 거칩니다. 검색은 특히 테이블에 많은 행이 포함된 경우 시간이 많이 걸리는 작업입니다. 인덱스는 이 절차의 속도를 높이는 것을 목표로 하며 정렬의 시작점으로 사용될 수도 있습니다. 이 단계에서는 인덱싱되지 않은 필드를 정렬할 수 없다는 점만 알아도 충분합니다.

필드별로 주문할 테이블이 필요한 경우 " "인 경우 먼저 이 필드를 색인화해야 합니다. 그런 다음 테이블이 이제 이러한 인덱스와 함께 작동해야 하며 자동으로 정렬된다는 점을 나타내기만 하면 됩니다.

잘 설계된 데이터베이스에서는 데이터 중복이 제거되고 일관성 없는 데이터가 저장될 가능성이 최소화됩니다. 따라서 데이터베이스 생성에는 데이터 중복성을 줄이고 신뢰성을 높이는 두 가지 주요 목표가 있습니다.

데이터베이스 관리 시스템을 포함한 모든 소프트웨어 제품의 수명주기는 (주로) 설계, 구현 및 운영 단계로 구성됩니다.

당연히 데이터베이스 애플리케이션의 라이프사이클에서 가장 중요한 요소는 설계 단계입니다. 시스템의 성능과 정보의 풍부함, 그에 따른 수명은 데이터베이스의 구조를 얼마나 세심하게 고려하고 해당 요소 간의 연결을 얼마나 명확하게 정의하는지에 따라 달라집니다.

데이터베이스 요구 사항

따라서 잘 설계된 데이터베이스는 다음과 같습니다.

1. 데이터베이스 콘텐츠에 대한 모든 사용자 요구 사항을 충족합니다. 데이터베이스를 설계하기 전에 데이터베이스 기능에 대한 사용자 요구 사항에 대해 광범위한 조사를 수행해야 합니다.

2. 데이터 일관성과 무결성을 보장합니다. 테이블을 디자인할 때 사용자가 잘못된 값을 입력할 가능성을 제한하는 일부 규칙과 속성을 정의해야 합니다. 데이터를 테이블에 직접 쓰기 전에 확인하려면 데이터베이스는 데이터 모델의 규칙을 호출하여 정보의 무결성이 유지되는지 확인해야 합니다.

3. 자연스럽고 이해하기 쉬운 정보구조를 제공합니다. 고품질 데이터베이스 구축을 통해 데이터베이스에 대한 쿼리를 보다 "투명"하고 이해하기 쉽게 만들 수 있습니다. 결과적으로 잘못된 데이터를 입력할 가능성이 줄어들고 데이터베이스 유지 관리 품질이 향상됩니다.

4. 사용자의 데이터베이스 성능 요구 사항을 충족합니다. 정보량이 많아 생산성 유지 문제

디자인 단계의 모든 단점을 즉시 "강조"하는 중요한 역할을 시작합니다.

다음 사항은 데이터베이스 디자인의 기본 단계를 나타냅니다.

1. 데이터베이스에 필요한 정보를 결정합니다.

2. 데이터베이스에서 모델링해야 하는 실제 개체를 분석합니다. 이러한 개체로부터 개체와 해당 개체의 특성(예: "부품" 개체의 경우 특성은 "이름", "색상", "무게" 등이 될 수 있음)을 형성하고 해당 개체의 목록을 형성합니다.

3. 선택한 DBMS(Paradox, dBase, FoxPro, Access, Clipper, InterBase, Sybase, Informix, Oracle 등)의 표기법에 따라 테이블과 열(필드) 등 엔터티와 특성을 일치시킵니다.

4. 각 개체를 고유하게 식별하는 속성을 정의합니다.

5. 데이터 무결성을 확립하고 유지하는 규칙을 개발하십시오.

6. 개체(테이블 및 열) 간의 연결을 설정하고 테이블을 정규화합니다.

7. 데이터 신뢰성 문제에 대한 계획을 세우고 필요한 경우 정보의 비밀을 유지합니다.


관련 정보.


관계 대수학은 집합 이론을 기반으로 하며 데이터베이스 논리의 기초입니다.
방금 데이터베이스와 SQL의 구조를 공부할 때 관계형 대수학에 대한 사전 지식이 더 많은 지식을 내 머리에 정확하게 맞추는 데 큰 도움이 되었으며, 이 글도 비슷한 효과를 낼 수 있도록 노력하겠습니다.

따라서 이 분야에 대한 연구를 시작하려고 하거나 단지 관심이 있는 경우에는 고양이를 클릭하십시오.

관계형 데이터베이스

먼저 모든 작업을 수행할 관계형 데이터베이스의 개념을 소개하겠습니다.

관계형 데이터베이스는 데이터베이스에 저장되어야 하는 모든 정보를 포함하는 관계의 모음입니다. 이 정의에서 우리는 관계라는 용어에 관심이 있지만 지금은 엄격한 정의 없이 그대로 두겠습니다.
더 나은 제품 테이블을 상상해 봅시다.

제품 테이블

ID 이름 회사 가격
123 쿠키 다크사이드 LLC 190
156 다크사이드 LLC 60
235 파인애플 OJSC “프룩티” 100
623 토마토 OOO "야채" 130

테이블은 4개의 행으로 구성되며, 테이블의 행은 관계형 이론에서 튜플입니다. 순서가 지정된 튜플 집합을 관계라고 합니다.
관계를 정의하기 전에 도메인이라는 또 다른 용어를 소개하겠습니다. 테이블과 관련된 도메인은 열입니다.

명확성을 위해 이제 관계에 대한 엄격한 정의를 소개합니다.

N개의 집합 D1,D2, …이 주어진다고 하자. Dn(도메인), 이 세트에 대한 관계 R은 다음 형식의 순서가 지정된 N-튜플 세트입니다. , 여기서 d1은 D1에 속합니다. 집합 D1,D2,..Dn을 관계 R의 도메인이라고 합니다.
튜플의 각 요소는 도메인 중 하나에 해당하는 속성 중 하나의 값을 나타냅니다.

관계의 열쇠
관계에서 요구사항은 모든 튜플이 고유해야 한다는 것입니다. 튜플을 고유하게 식별하기 위해 기본 키가 있습니다. 기본 키는 특정 튜플을 고유하게 식별하고 추가 속성을 포함하지 않는 속성 또는 최소 속성 집합입니다.
이는 기본 키의 모든 속성이 특정 튜플을 식별하는 데 필요하고 충분해야 하며 키의 속성 중 하나라도 생략하면 식별이 불충분해진다는 의미입니다.
예를 들어, 이러한 테이블에서 키는 첫 번째 열과 두 번째 열의 속성 조합이 됩니다.

드라이버 테이블

조직에는 여러 운전자가 있을 수 있으며 운전자를 고유하게 식별하려면 "조직 이름" 열과 "운전자 이름" 열의 값이 모두 필요하다는 것을 알 수 있습니다. 이러한 키를 복합 키라고 합니다.

관계형 데이터베이스에서 테이블은 마스터 테이블과 하위 테이블로 서로 연결되고 관련됩니다. 메인 테이블과 서브 테이블 간의 연결은 메인 테이블의 기본 키와 서브 테이블의 외래 키를 통해 이루어집니다.
외래 키는 기본 테이블의 기본 키인 속성 또는 속성 집합입니다.

이 준비 이론은 관계 대수의 기본 연산에 익숙해지기에 충분합니다.

관계 대수의 연산

관계 대수학의 기본 8가지 연산은 E. Codd에 의해 제안되었습니다.
  • 협회
  • 교차로
  • 빼기
  • 데카르트 곱
  • 견본
  • 투사
  • 화합물
  • 분할
작업의 전반부는 세트에 대한 동일한 작업과 유사합니다. 일부 작업은 다른 작업의 관점에서 표현될 수 있습니다. 예제를 통해 대부분의 작업을 살펴보겠습니다.

이해를 위해서는 관계에 대한 대수 연산의 결과가 또 다른 관계이며, 이는 다른 연산에서 사용될 수 있다는 점을 기억하는 것이 중요합니다.
예제에서 우리에게 유용할 또 다른 테이블을 만들어 보겠습니다.

판매자 테이블

ID 파는 사람
123 OOO “다트”
156 OJSC "베드로"
235 CJSC '야채바자'
623 JSC "회사"

이 테이블에서 ID는 PRODUCTS 테이블의 기본 키와 연관된 외래 키라는 점에 동의합시다.

먼저 가장 간단한 작업인 관계 이름을 살펴보겠습니다. 그 결과는 동일한 관계가 됩니다. 즉, PRODUCTS 작업을 수행하면 PRODUCTS 관계의 복사본을 받게 됩니다.

투사
프로젝션은 관계의 속성이 지정된 도메인에서만 추출되는 작업입니다. 즉, 필요한 열만 테이블에서 선택되며, 동일한 튜플이 여러 개 획득되면 해당 튜플의 인스턴스 하나만 남습니다. 결과적인 관계.
예를 들어 PRODUCTS 테이블에서 ID와 PRICE를 선택하여 프로젝션을 만들어 보겠습니다.

작업 구문:
π(ID, 가격) 제품

샘플 조건에서는 모든 부울 표현식을 사용할 수 있습니다. 가격이 90보다 크고 제품 ID가 300보다 작은 다른 항목을 선택해 보겠습니다.

σ(가격>90^ID<300) PRODUCTS

곱셈
곱셈 또는 데카르트 곱은 두 관계에 대해 수행되는 연산으로, 그 결과 두 초기 관계에서 모든 도메인과의 관계를 얻습니다. 이러한 도메인의 튜플은 초기 관계에서 가능한 모든 튜플 조합이 됩니다. 예를 들면 더 명확해질 것입니다.

PRODUCTS 및 SELLERS 테이블의 데카르트 곱을 얻습니다.
작업 구문:

제품 × 판매자
이 두 테이블에는 동일한 ID 도메인이 있음을 알 수 있습니다. 이 상황에서는 아래와 같이 동일한 이름을 가진 도메인 앞에 해당 관계의 이름이 붙습니다.
간결하게 하기 위해 전체 비율이 아니라 조건 ID가 있는 샘플을 곱해 보겠습니다.<235

(동일한 튜플은 색상으로 강조 표시됩니다)

제품.ID 이름 회사 가격 판매자.ID 파는 사람
123 쿠키 다크사이드 LLC 190 123 OOO “다트”
156 다크사이드 LLC 60 156 OJSC "베드로"
123 쿠키 다크사이드 LLC 190 156 OJSC "베드로"
156 다크사이드 LLC 60 123 OOO “다트”

이 작업을 사용하는 예를 들어 가격이 90 미만인 판매자를 선택해야 한다고 가정해 보겠습니다. 제품이 없으면 먼저 첫 번째 테이블에서 제품 ID를 얻은 다음 두 번째 테이블에서 이 ID를 사용하여 필요한 정보를 얻어야 합니다. SELLER 이름, 제품 사용 시 다음 쿼리는 다음과 같습니다.

π (판매자) σ (RODUCTS.ID=판매자.ID ^ 가격<90) PRODUCTS × SELLERS

이 작업의 결과로 우리는 다음 관계를 얻습니다.

파는 사람
OJSC "베드로"
연결과 자연스러운 연결
조인 작업은 투영 작업의 반대이며 기존 두 관계에서 새 관계를 만듭니다. 첫 번째 릴레이션과 두 번째 릴레이션의 튜플을 연결하여 새로운 릴레이션을 얻고, 지정된 속성의 값이 일치하는 릴레이션은 연결 대상이 됩니다. 특히 PRODUCTS 및 SELLERS 관계를 연결하는 경우 이러한 속성은 ID 도메인의 속성입니다.

또한 명확성을 위해 두 작업의 결과로 연결을 상상할 수 있습니다. 먼저 소스 테이블의 곱을 가져온 다음 결과 관계에서 동일한 도메인의 속성이 동일하다는 조건으로 선택합니다. 이 경우 조건은 PRODUCTS.ID와 SELLERS.ID가 동일하다는 것입니다.

PRODUCTS와 SELLERS 관계를 연결하고 관계를 얻으려고 노력해 보겠습니다.

제품.ID 이름 회사 가격 판매자.ID 파는 사람
123 쿠키 다크사이드 LLC 190 123 OOO “다트”
156 다크사이드 LLC 60 156 OJSC "베드로"
235 파인애플 OJSC “프룩티” 100 235 CJSC '야채바자'
623 토마토 OOO "야채" 130 623 JSC "회사"

자연 조인은 유사한 관계를 받지만 데이터베이스에 올바르게 구성된 스키마가 있는 경우(이 경우 PRODUCTS ID 테이블의 기본 키가 SELLERS ID 테이블의 외래 키에 연결되어 있음) 결과 관계에는 다음이 포함됩니다. 단 하나의 ID 도메인.

작업 구문:
제품 ⋈ 판매자;

당신은 다음과 같은 관계를 얻습니다.

제품.ID 이름 회사 가격 파는 사람
123 쿠키 다크사이드 LLC 190 OOO “다트”
156 다크사이드 LLC 60 OJSC "베드로"
235 파인애플 OJSC “프룩티” 100 CJSC '야채바자'
623 토마토 OOO "야채" 130 JSC "회사"
교차와 뺄셈.
교차 연산의 결과는 두 릴레이션에 완전히 포함된 튜플로 구성된 릴레이션이 됩니다.
빼기의 결과는 두 번째 릴레이션의 튜플이 아닌 첫 번째 릴레이션의 튜플로 구성된 릴레이션이 됩니다.
이러한 작업은 세트의 작업과 유사하므로 자세히 설명할 필요는 없을 것 같습니다.
정보 출처
  • 데이터베이스 사용 및 설계의 기본 - V. M. Ilyushechkin
  • 강의 과정 데이터베이스 소개 - Jennifer Widom, Stanford University

합리적인 의견에 감사드립니다.

중요한 사항에 대해 간략하게 설명합니다.

데이터베이스 정규화

첫 번째 정규형(1NF)

  • 중복된 데이터 그룹 없음
  • 데이터의 원자성이 보장됩니다(모든 데이터는 자율적이고 독립적입니다).

최상위 수준에서는 기본 키를 생성한 다음 반복되는 데이터 그룹을 새 테이블로 이동하고 해당 테이블에 대한 기본 키를 생성하는 등의 작업을 통해 이를 수행합니다. 또한 열에 복합 정보가 포함된 모든 레코드를 열 데이터의 각 부분에 대한 별도의 행으로 분할해야 합니다.

제2정규형(2NF)

  • 테이블은 1NF의 조건을 만족합니다.
  • 각 열은 키의 일부가 아닌 전체 키에 따라 달라집니다.

제3정규형(3NF)

  • 테이블은 2NF의 조건을 만족합니다.
  • 기본 키의 일부가 아닌 열에 종속된 열이 없습니다.
  • 파생된 데이터가 포함되어 있지 않습니다.

실용적인 가치가 별로 없는 기타 정규형:

Boyce-Codd 정규형

옵션 3NF. 후보키가 중복되는 상황을 해결하기 위해 설계되었습니다. 사실 학계 밖에서는 논리적인 정당성이 전혀 없습니다.

네 번째 정규형

다중값 종속성 문제를 해결하도록 설계되었습니다. 이러한 상황은 3NF로 축소된 테이블에서 복합 기본 키의 한 열이 다른 기본 키 열에 종속되는 경우 발생합니다.

다섯 번째 정규형

손실 유무에 관계없이 관계를 분해할 때 사용됩니다. 이는 하나의 관계를 여러 개의 다른 관계로 분할할 수 있지만 그 후에는 더 이상 논리적으로 원래 형태로 되돌릴 수 없는 상황에서 발생합니다.

여섯번째 정규형(도메인 키 정규형)

데이터베이스에 수정 이상이 없는지 확인합니다. 실제 상황에서는 사실상 불가능합니다.

관계.

예전에 여자한테 남자들이 하는 말을 들은 적이 있는데
즉시 그 방에서 나가려고 노력하십시오.
"관계"라는 단어가 들렸습니다.<...>성공의 열쇠
관계는 모든 사람이 자신의 역할을 인식하는 것입니다.
이와 관련하여 규칙 및 제한 사항은 물론,
이 관계에 의해 부과됩니다.
(C) Robert Viera, “전문 SQL Server 2000 프로그래밍”

관계의 유형

  • 일대일(다른 데이터베이스에 일치하는 데이터를 저장해야 하거나 최대 행 데이터 크기를 초과하는 경우에 적합함)
  • 0 또는 일대일
  • 일대다
  • 1 대 0, -1 또는 -다
  • 다대다(접합 테이블)

협회

내부 조인

독점 가입. 선택 결과에는 지정된 조건에 대해 쌍을 이루는 테이블에 일치하는 테이블 레코드만 포함됩니다.

왼쪽|오른쪽 조인

포함 조인. 선택 결과에는 테이블의 왼쪽/오른쪽에 있는 레코드가 포함됩니다. 가입하다각기. 이 경우 누락된 "페어링된" 레코드의 데이터가 채워집니다. 없는.
FROM left_table LEFT JOIN right_table– 왼쪽 테이블의 모든 레코드가 포함됩니다.
FROM left_table RIGHT JOIN right_table– 오른쪽 테이블 right_table의 모든 레코드가 포함됩니다.

전체 조인

포함 조인. 선택 결과에는 다른 테이블에 일치 항목이 있는 레코드뿐만 아니라 다른 테이블에 일치 항목이 없는 두 테이블의 레코드도 포함됩니다. 이 경우 누락된 "쌍" 레코드의 데이터는 NULL로 채워집니다.

교차 조인

크로스 유니온(데카르트 곱). 한 테이블의 모든 레코드가 다른 테이블의 모든 레코드와 일치됩니다. 결과 레코드 수는 두 테이블의 레코드 수를 곱한 것과 같습니다.

여러 가지를 배열하는 원리 가입하다'에스

여러 테이블을 조인해야 하는 경우 다음 두 가지 원칙을 기억해야 합니다.

  1. 모든 노조는 왼쪽으로 가입하다쿼리에 포함하거나 제외하기 위해 단일 테이블로 처리됩니다.
  2. 모든 노조는 오른쪽에 있다 가입하다또한 쿼리에 포함하거나 제외하기 위해 단일 테이블로 처리됩니다.

이러한 원칙의 결과는 복잡한 연관성 형성에 대한 다음 권장 사항입니다.

  • 가능하다면 INNER JOIN을 사용해야 합니다.
  • OUTER JOIN을 사용해야 하는 경우에는 마지막에 배치하고, INNER JOIN은 조인 시작 부분에 배치해야 합니다.

추신 위의 모든 내용은 관계형 데이터베이스 이론의 일반적인 "가정"이며 특정 DBMS의 기능과 관련이 없습니다.

데이터 모델은 데이터 구조 및 처리 작업의 집합입니다. 데이터 모델을 사용하면 객체의 구조와 객체 사이에 설정된 관계를 시각적으로 표현할 수 있습니다. 데이터 모델 용어는 "데이터 요소"와 "바인딩 규칙"이라는 개념으로 특징지어집니다. 데이터 요소는 모든 데이터 집합을 설명하고 연관 규칙은 데이터 요소를 상호 연결하기 위한 알고리즘을 정의합니다. 현재까지 다양한 데이터 모델이 개발되었지만 실제로는 세 가지 주요 모델이 사용됩니다. 계층적, 네트워크 및 관계형 데이터 모델이 있습니다. 따라서 그들은 계층적, 네트워크 및 관계형 DBMS에 대해 이야기합니다.

O 계층적 데이터 모델. 계층적으로 구성된 데이터는 일상생활에서 매우 흔합니다. 예를 들어, 고등 교육 기관의 구조는 다단계 계층 구조입니다. 계층적(트리) 데이터베이스는 순서가 지정된 요소 집합으로 구성됩니다. 이 모델에서는 초기 요소가 다른 요소를 생성하고 이러한 요소가 차례로 추가 요소를 생성합니다. 각 하위 요소에는 상위 요소가 하나만 있습니다.

조직 구조, 자료 목록, 책의 목차, 프로젝트 계획 및 기타 다양한 데이터 세트를 계층적 형태로 표시할 수 있습니다. 조상과 자손 사이의 연결 무결성은 자동으로 유지됩니다. 기본 규칙: 부모 없이는 자식이 존재할 수 없습니다.

이 모델의 가장 큰 단점은 설계 중에 데이터베이스의 기초가 된 계층 구조를 사용해야 한다는 것입니다. 데이터를 지속적으로 재구성해야 하는 필요성(종종 재구성이 불가능함)으로 인해 보다 일반적인 모델, 즉 네트워크 모델이 생성되었습니다.

O 네트워크 데이터 모델. 데이터 구성에 대한 네트워크 접근 방식은 계층적 접근 방식의 확장입니다. 이 모델은 생성된 각 요소가 둘 이상의 생성 요소를 가질 수 있다는 점에서 계층적 모델과 다릅니다. ■

네트워크 데이터베이스는 해당 조직의 데이터에 내재된 모든 종류의 관계를 직접적으로 나타낼 수 있기 때문에 이 데이터를 다양한 방식으로 탐색, 탐색 및 쿼리할 수 있습니다. 즉, 네트워크 모델은 하나의 계층에만 국한되지 않습니다. 그러나 네트워크 데이터베이스에 요청하려면 구조를 깊이 파고들어(이 데이터베이스의 스키마를 가지고 있어야 함) 데이터베이스를 탐색하기 위한 메커니즘을 개발해야 하는데, 이는 이 데이터베이스 모델의 중요한 단점입니다. .

O 관계형 데이터 모델. 관계형 데이터 모델의 기본 아이디어는 모든 데이터 세트를 2차원 테이블로 표현하는 것입니다. 가장 간단한 형태의 관계형 모델은 단일 2차원 테이블을 설명하지만, 대부분의 경우 모델은 여러 다른 테이블 간의 구조와 관계를 설명합니다.

관계형 데이터 모델

따라서 정보시스템의 목적은 정보처리이다. 데이터~에 대한 사물현실 세계를 고려하여 사이객체 사이. 데이터베이스 이론에서는 데이터를 흔히 데이터라고 부릅니다. 속성 및사물 - 엔터티.객체, 속성, 연결은 I.S.의 기본 개념입니다.

객체(또는 본질)은 존재하는 것입니다. 구별 가능,즉, 하나의 유사한 객체를 다른 유사한 객체와 구별하는 이름과 방법이 있는 객체를 "무언가"라고 부를 수 있습니다. 예를 들어 모든 학교는 객체입니다. 객체는 사람, 학교 수업, 회사, 합금, 화합물 등이기도 합니다. 객체는 물질적 객체일 뿐만 아니라 현실 세계를 반영하는 보다 추상적인 개념일 수도 있습니다. 예를 들어 이벤트, 지역, 예술 작품 등이 있습니다. 서적(인쇄물이 아닌 작품), 연극 공연, 영화; 법적 규범, 철학적 이론 등

기인하다(또는 주어진)-이것은 특정 개체를 특성화하고 개체의 특정 인스턴스에 대해 특정 숫자, 텍스트 또는 기타 값을 취하는 특정 표시기입니다. 정보 시스템은 특정 주제 영역과 관련하여 설계된 객체 세트로 작동합니다. 속성 값(데이터) 특정 개체의. 예를 들어, 학교에서 객체 집합으로 수업을 들어보겠습니다. 한 학급의 학생 수는 숫자 값을 갖는 기준입니다(한 학급은 28명, 다른 학급은 32명). 클래스 이름은 텍스트 값을 사용하는 주어진 이름입니다(하나는 10A, 다른 하나는 9B 등).

관계형 데이터베이스의 개발은 60년대 후반에 시작되었으며, 이때 논의된 첫 번째 작품이 등장했습니다. 데이터베이스를 설계할 때 친숙하고 자연스러운 데이터 표현 방식(소위 표 형식의 데이터 논리 모델)을 사용할 수 있는 가능성.

관계형 데이터베이스 이론의 창시자는 1970년 6월 6일에 기사를 발표한 IBM 직원 E. Codd 박사로 간주됩니다. 대규모 공유 데이터 뱅크를 위한 데이터의 관계형 모델(대규모 집단 데이터 뱅크를 위한 관계형 데이터 모델). 이 기사에서는 "관계형 데이터 모델"이라는 용어를 처음으로 사용했습니다. 70년대 미국에서 E. Codd 박사가 개발한 관계형 데이터베이스 이론은 데이터를 효과적으로 구성하기 위한 규칙을 설명하는 강력한 수학적 기반을 갖추고 있습니다. E. Codd가 개발한 이론적 틀은 데이터베이스 설계 이론 개발의 기초가 되었습니다.

교육을 받은 수학자 E. Codd는 데이터 처리를 위해 집합 이론(합집합, 교차점, 차이, 데카르트 곱) 장치를 사용할 것을 제안했습니다. 그는 모든 데이터 세트가 수학에서 "관계"라고 알려진 특별한 종류의 2차원 테이블 형태로 표현될 수 있음을 증명했습니다.

관계형데이터베이스는 모든 데이터가 데이터 값의 직사각형 테이블 형태로 사용자에게 제공되고 데이터베이스에 대한 모든 작업이 테이블을 사용한 조작으로 축소되는 데이터베이스로 간주됩니다.

테이블은 다음과 같이 구성됩니다. 열(필드)그리고 라인(레코드);데이터베이스 내에서 고유한 이름을 가집니다. 테이블반영하다 객체 유형현실 세계 (실재),그리고 그녀 각자 문자열은 특정 개체입니다.각 테이블 열은 객체의 특정 속성에 대한 값 모음입니다. 값은 개체 속성에 대해 가능한 모든 값 집합에서 선택됩니다. 도메인.

가장 일반적인 형태에서 도메인은 도메인의 요소가 속하는 일부 기본 데이터 유형과 데이터 요소에 적용되는 임의의 부울 표현식을 지정하여 정의됩니다. 데이터 항목에 대한 부울 조건을 평가하고 결과가 true인 경우 해당 항목은 도메인에 속합니다. 가장 간단한 경우, 도메인은 동일한 유형의 유효한 잠재적 값 집합으로 정의됩니다. 예를 들어, 모든 직원의 생년월일을 모아놓은 것이 '생년월일 도메인'이 되고, 모든 직원의 이름이 '직원 이름 도메인'이 됩니다. 생년월일 도메인은 특정 시점 데이터 유형을 가져야 하며, 직원 이름 도메인은 문자 데이터 유형을 가져야 합니다.

두 값이 동일한 도메인에서 나온 경우 두 값을 비교할 수 있습니다. 예를 들어 생년월일 도메인에서 두 개의 값을 가져오면 이를 비교하여 어느 직원이 나이가 더 많은지 확인할 수 있습니다. 값을 다른 도메인에서 가져온 경우 비교가 허용되지 않습니다. 왜냐하면 아마도 의미가 없기 때문입니다. 예를 들어, 직원의 이름과 생년월일을 비교해 보면 확실한 것은 없습니다.

각 열(필드)에는 이름이 있으며 일반적으로 테이블 상단에 기록됩니다. 특정 DBMS 내에서 테이블을 설계할 때 각 필드에 대해 해당 테이블을 선택할 수 있습니다. 유형,즉, 표시 규칙 세트를 정의하고 이 필드에 저장된 데이터에 대해 수행할 수 있는 작업을 결정합니다. 유형 집합은 DBMS마다 다를 수 있습니다.

필드 이름은 테이블에서 고유해야 하지만, 서로 다른 테이블에 동일한 이름의 필드가 있을 수 있습니다. 모든 테이블에는 하나 이상의 필드가 있어야 합니다. 필드는 생성 시 이름이 표시된 순서에 따라 테이블에 배치됩니다. 필드와 달리 문자열에는 이름이 없습니다. 테이블에서의 순서는 정의되지 않으며 그 수는 논리적으로 무제한입니다.

테이블의 행은 순서가 지정되어 있지 않으므로 위치에 따라 행을 선택할 수 없습니다. 행 중에 "첫 번째", "두 번째" 또는 "마지막"이 없습니다. 모든 테이블에는 하나 이상의 열이 있으며, 그 값은 각 행을 고유하게 식별합니다. 이러한 열(또는 열의 조합)을 기본 키. 테이블의 숫자 레코드에 인공 필드가 도입되는 경우가 많습니다. 예를 들어, 이러한 필드는 테이블에 있는 각 레코드의 고유성을 보장할 수 있는 순서 필드일 수 있습니다. 키에는 다음 속성이 있어야 합니다.

독창성.주어진 시간에 두 개의 서로 다른 관계 튜플은 키에 포함된 속성 조합에 대해 동일한 값을 갖지 않습니다. 즉, 동일한 식별 번호나 여권 번호를 가진 두 개의 행이 테이블에 있을 수 없습니다.

미니멀리즘.키에 포함된 어떤 속성도 고유성을 위반하지 않고는 키에서 제외될 수 없습니다. 즉, 여권번호와 주민등록번호가 모두 포함된 키를 생성해서는 안 된다는 의미입니다. 튜플을 고유하게 식별하려면 이러한 속성 중 하나를 사용하는 것으로 충분합니다. 또한 키에 고유하지 않은 속성을 포함해서는 안 됩니다. 즉, 식별 번호와 직원 이름의 조합을 키로 사용하는 것이 금지됩니다. 키에서 직원 이름을 제외하면 각 행을 계속 고유하게 식별할 수 있습니다.

모든 관계에는 최소한 하나의 가능한 키가 있습니다. 모든 속성의 전체가 고유성 조건을 충족하기 때문입니다. 이는 관계의 정의 자체에서 따릅니다.

가능한 키 중 하나가 무작위로 선택됩니다. 기본 키로.나머지 가능한 키는 다음과 같이 사용됩니다. 대체 키.예를 들어, 식별 번호를 기본 키로 선택하면 여권 번호가 대체 키가 됩니다.

테이블의 관계는 관계형 데이터 모델의 가장 중요한 요소입니다. 지원됩니다 외래 키.

관계형 데이터베이스 모델을 설명할 때 설명 수준(이론 또는 실제)과 시스템(Access, SQL Server, dBase)에 따라 동일한 개념에 대해 다른 용어가 사용되는 경우가 많습니다. 테이블에 2.3에는 사용된 용어가 요약되어 있습니다.

표 2.3.데이터베이스 용어

데이터베이스 이론____________ 관계형 데이터베이스_________ SQL Server __________

관계 테이블 테이블

튜플 레코드 행

속성필드_______________열

관계형 데이터베이스

관계형 데이터베이스데이터베이스에 저장되어야 하는 모든 정보를 포함하는 관계 집합입니다. 즉, 데이터베이스는 모든 데이터를 저장하는 데 필요한 테이블 집합을 나타냅니다. 관계형 데이터베이스의 테이블은 서로 논리적으로 관련되어 있으며, 일반적으로 관계형 데이터베이스를 설계하기 위한 요구 사항은 몇 가지 규칙으로 축소될 수 있습니다.

О 각 테이블은 데이터베이스에서 고유한 이름을 가지며 동일한 유형의 행으로 구성됩니다.

O 각 테이블은 고정된 개수의 열과 값으로 구성됩니다. 단일 행 열에 둘 이상의 값을 저장할 수 없습니다. 예를 들어, 저자, 발행일, 발행부수 등에 대한 정보가 포함된 테이블이 있는 경우 저자 이름이 포함된 열에는 성이 두 개 이상 포함될 수 없습니다. 두 명 이상의 저자가 책을 쓴 경우 추가 표를 사용해야 합니다.

O 어떤 시점에도 테이블에는 서로 중복되는 두 개의 행이 없습니다. 테이블의 행을 고유하게 식별하려면 행의 값이 하나 이상 달라야 합니다.

О 각 열에는 테이블 내에서 고유한 이름이 할당됩니다. 이 열에 동일한 값(날짜, 성, 전화번호, 금액 등)이 배치되도록 특정 데이터 유형이 설정됩니다.

O 데이터베이스의 완전한 정보 내용은 데이터 자체의 명시적 값으로 표현되며, 이것이 유일한 표현 방법입니다. 예를 들어, 테이블 간의 관계는 관계를 인위적으로 정의하는 포인터를 기반으로 하는 것이 아니라 해당 열에 저장된 데이터를 기반으로 합니다.

О 데이터 처리 시 테이블의 모든 행이나 열에 자유롭게 접근할 수 있습니다. 테이블에 저장된 값은 데이터에 액세스하는 순서에 아무런 제한을 두지 않습니다. 열에 대한 설명,