SQL Server 데이터베이스 구조 와 대상,데이터 완전 성 정의

머리말
이 절 에서 우 리 는 SQL 여행 을 계속 합 니 다.이 절 에서 우 리 는 주제 와 같이 기본 지식 과 주의해 야 할 부분 을 이야기 합 니 다.만약 에 타당 하지 않 은 점 이 있 으 면 짧 은 내용,깊이 있 는 이 해 를 지적 해 주 십시오.
데이터베이스 구조 와 대상
데이터 베 이 스 는 구 조 를 포함 하고 구 조 는 대상 을 포함 하 며 구 조 는 표,보기,저장 과정 등 대상 의 용기 로 볼 수 있다.구 조 는 하나의 네 임 스페이스 로 대상 이름 의 접두사 로 사 용 됩 니 다.예 를 들 어 Cnblogs 구조 에 Blogs 라 는 표 가 있 습 니 다.이때 우 리 는 구조 적 한정 식 이름(즉 두 개의 분 식 대상 이름)을 사용 하기 때문에 Blogs 는 Cnblogs.Blogs 라 고 표시 합 니 다.만약 에 우리 가 대상 을 인용 할 때 구조 이름 을 생략 하면 SQL Server 는 대상 이 사용자 의 기본 구조 에 존재 하 는 지 확인 할 것 입 니 다.그렇지 않 으 면 dbo 구조 에 존재 하 는 지 확인 할 것 입 니 다.우리 가 데이터 베 이 스 를 만 들 때 사용자 가 다른 구 조 를 명시 적 으로 지정 하지 않 았 을 때 데이터 뱅 크 는 자동 으로 dbo 구 조 를 기본 구조 로 합 니 다.마이크로소프트 도 코드 에서 대상 을 인용 할 때 항상[2 부 분식]대상 이름 을 사용 하 는 것 을 권장 합 니 다.이 를 바탕 으로 우리 가 추천 하 는 건 의 를 인용 할 때 대상 을 추천 합 니 다.코드 에서 구조 한정 식 대상 이름 인 두 개의 분식 이름 을 항상 사용 하 는 것 을 권장 합 니 다.
데이터 완전 성 정의
관계 모델 의 가장 큰 장점 은 우리 가 데이터 의 완전 성 을 사용자 정의 할 수 있 는 동시에 데이터 의 완전 성 은 관계 모델 이 없어 서 는 안 되 거나 없어 서 는 안 되 는 일부분 이 고 데이터 의 완전 성 이 무엇 인지 하 는 것 이다.투과 점 은 데 이 터 를 성명 식 으로 제약 하 는 것 이다.SQL Server 에서 사 운 드 제약 은 메 인 키 제약,유일한 키 제약,외부 키 제약,검사 제약,기본 제약 을 포함한다.다음은 이 몇 가지 구속 을 소개 하 겠 습 니 다.
주 키 제약 조건
다음은 먼저 표를 만 듭 니 다.

CREATE TABLE Blogs
(
 BlogId INT NOT NULL,
 BlogName VARCHAR(max) NOT NULL
);
주 키 제약 은 강제 줄 의 유일 성 을 나타 내 는 데 사 용 됩 니 다.위 에 서 는 줄 의 유일 성 을 나 타 낼 수 없습니다.현재 제약 을 추가 하여 강제 줄 의 유일 성 을 PRIMARY KEY 로 다음 과 같이 제약 합 니 다.

ALTER TABLE dbo.Blogs
ADD CONSTRAINT pk_constraint_blogId PRIMARY KEY(BlogId)
키 폴 더 에 서 는 열 BlogId 에 대한 제약 을 생 성하 여 홈 키 로 업그레이드 합 니 다.다음 과 같 습 니 다.

홈 키 에 중복 데 이 터 를 삽입 할 때 중복 키 를 삽입 하 는 데 실 패 했 음 을 알려 주 고 제약 을 위반 합 니 다.논리 적 메 인 키 제약 의 유일 성 을 강제 하기 위해 SQL Server 는 배경 에 유일한 색인 을 만 듭 니 다.유일한 색인 은 SQL Server 가 유일 성 을 강제 하기 위해 사용 하 는 물리 적 메커니즘 입 니 다.색인(유일한 색인 은 아 닙 니 다)은 조 회 를 가속 화하 고 불필요 한 전체 표 스 캔 을 피하 기 위해 서 입 니 다.
유일한 제약 조건
강제 행 을 제약 하 는 유일한 특성 은 우리 가 자신의 데이터 베이스 에서 관계 모델 의 예비 키 개념 을 실현 하도록 허용 한다.이 는 메 인 키 와 달리 같은 표 에서 여러 개의 유일한 제약 조건 을 정의 할 수 있 으 며,동시에 여러 개의 NULL 표 시 를 허용 할 수 있 습 니 다(NULL 표 시 는 서로 다 릅 니 다).그러나 SQL Server 는 NULL 표 시 를 반복 하지 않 습 니 다(두 개의 NULL 표 시 는 서로 같 습 니 다).UNIQUE 를 통 해 제약 합 니 다.BlogName 에 대한 유일한 제약 조건 은 다음 과 같 습 니 다.

ALTER TABLE dbo.Blogs
ADD CONSTRAINT uq_constraint_blogname UNIQUE(BlogName)
이 때 유일한 제약 조건 을 추가 한 결 과 는 다음 과 같 습 니 다.

문자열 과 텍스트 형식 에 유일한 제약 을 추가 할 수 없다 는 것 을 하나씩 시도 해 보 았 습 니 다.지식 을 늘 렸 습 니 다.왜 유일한 제약 을 추가 할 수 없 는 지 모 르 겠 습 니 다.
상기 메 인 키 제약 과 유일한 제약 에 대한 설명 을 통 해 우 리 는 메 인 키 제약 과 유일한 제약 을 알 게 되 었 습 니까?블 로 거들 이 보 는 것 은 SQL Server 2012 기초 튜 토리 얼 입 니 다.튜 토리 얼 은 여기까지 입 니 다.이로써 저 는 아직 파악 하지 못 했 습 니 다.메 인 키 제약 과 유일한 제약 은 어떻게 사용 해 야 하 는 지,그리고 메 인 키 제약 과 유일한 제약 은 어떤 차이 가 있 습 니까?
(1)키 에 메 인 키 제약 을 추가 하면 이 를 바탕 으로 유일한 제약 을 추가 할 수 있 습 니까?
우 리 는 위 에서 이미 BlogId 를 메 인 키 제약 조건 으로 추가 한 토대 에서 유일한 제약 조건 을 추가 합 니 다.다음 과 같 습 니 다.

ALTER TABLE dbo.Blogs
ADD CONSTRAINT uq_constraint_blogId UNIQUE(BlogId)

위 를 통 해 같은 열 에 메 인 키 제약 도 추가 할 수 있 고 유일한 제약 도 추가 할 수 있다 는 것 을 알 수 있 습 니 다.
(2)상기 기초 튜 토리 얼 에서 도 유일 하 게 제약 하 는 열 은 여러 개의 NULL 표 시 를 허용 할 수 있 습 니 다.정말 입 니까?우 리 는 다른 상황 을 좀 보 자.
다음 표를 만 듭 니 다.

create table test (
Id INT NOT NULL,
NAME VARCHAR(max) NOT NULL
)
다음은 Id 에 대한 유일한 구속 입 니 다.

ALTER TABLE test
ADD CONSTRAINT UNQ UNIQUE(Id)
이때 우 리 는 Id 에 NULL 을 추가 해 보 겠 습 니 다.결 과 는 삽입 할 수 있 습 니까?안 됩 니까?INSERT INTO TEST VALUES(NULL,'B')
유일한 구속 열 은 NULL 이 될 수 있 는 것 이 아 닙 니까?튜 토리 얼 이 잘못 되 었 거나 sb 번역 이 잘못 되 었 습 니까?이 일 은 정의 표를 볼 때 열 Id 는 NULL 이 될 수 없 기 때문에 여기까지 우리 의 의문 은 끝 난 셈 입 니 다.유일한 구속 열 은 NULL 이 될 수 있 습 니 다.
(3)메 인 키 제약 과 유일한 제약 의 차이?
홈 키 제약:열 에 대한 강제 유일 성 을 통 해 홈 키 는 열 에 집합 색인 을 만 들 고 홈 키 가 비어 있 으 면 안 됩 니 다.
유일한 제약 조건:열 에 대한 강제 유일 성 을 통 해 열 에 만 든 유일한 키 는 비 집합 색인 이 고 유일한 제약 조건 은 하나의 NULL 값 만 허용 합 니 다.
두 가지 가장 큰 차이 점 은 메 인 키 제약 이 강조 하 는 것 은 줄 의 유일 성 으로 줄 을 표시 하 는 것 이 고 중복 을 허용 하지 않 으 며 유일한 제약 은 열의 유일 성 이 중복 을 허용 하지 않 는 다 는 것 이다.
(4)메 인 키 제약 과 유일한 제약 은 유일한 색인 을 만 들 수 있다.
【1】유일한 색인 은 메 인 키 제약 과 유일한 제약 을 통 해 만 들 수 있 습 니 다.
표 에 집합 색인 이 존재 하지 않 고 비 집합 색인 을 명확 하 게 지정 하지 않 으 면 홈 키 제약 을 통 해 유일한 집합 색인 을 자동 으로 만 듭 니 다.
유일한 제약 조건 을 만 들 때 기본 값 으로 다음 비 집합 색인 이 생 성 되 어 유일한 제약 조건 을 강제 합 니 다.표 에 집합 색인 이 존재 하지 않 으 면 집합 색인 을 지정 할 수 있 습 니 다.
【2】유일한 구속 과 유일한 색인 차이
우 리 는 다음 에 표를 만 듭 니 다.다음 과 같 습 니 다.

CREATE TABLE test
(
 Id INT NOT NULL PRIMARY KEY,
 Code INT
)
우선 저 는 코드 에 만 유일한 색인 을 만 듭 니 다.CREATE UNIQUE INDEX uq_ix ON dbo.test(Code)이때 우 리 는 코드 열 에 유일한 제약 조건 을 추가 합 니 다.

ALTER TABLE StudyTest.dbo.test
ADD CONSTRAINT uq_nonclster_ix UNIQUE(Code)
이 때 우 리 는 색인 폴 더 에서 만 든 유일한 색인 과 유일한 제약 이 만 든 유일한 비 집합 색인 을 볼 수 있 습 니 다.
둘 다 유일 하 게 비 집합 색인 인 것 같 습 니 다.아이콘 이 다 를 뿐 입 니 다.둘 다 똑 같 을 겁 니 다.
(5)유일한 색인 과 유일한 구속 의 차 이 는 어디 에 있 습 니까?유일한 구속 이 유일한 색인 을 대체 할 수 있 습 니까?

【1】반환 오류 코드 가 다 름
우리 가 데 이 터 를 삽입 할 때 유일한 색인 은 오류 코드 2601 을 되 돌려 줍 니 다.

되 돌아 오 는 유일한 오류 코드 는 2627 입 니 다.

【2】유일한 제약 은 선별 할 수 없고 유일한 색인 은 선별 할 수 있 습 니 다.다음 과 같 습 니 다.

CREATE UNIQUE NONCLUSTERED INDEX uq_code_filter
ON test(Code) WHERE Code is not null;

요약:상기 한 것 은 이들 이 사용 하 는 것 이 다 르 고 유일한 제약 과 유일한 색인 에 큰 차이 가 없다 는 것 을 나타 내 는 동시에 유일한 제약 과 유일한 색인 은 조회 성능 에 있어 서도 큰 차이 가 없다.유일한 제약 에 대해 우 리 는 데이터 의 완전 성 을 강조 하고 열 에 대해 유일한 제약 을 하여 그 값 이 중복 되 지 않도록 확보한다.이 동시에 색인 조 회 를 만 들 때 성능 이 현저히 향상 된다.
외부 키 제약 조건
외부 키 제약 도 데이터 의 완전 성 을 강제 하 는 데 사 용 됩 니 다.외부 키 의 목적 은 외부 키 열 에서 허용 하 는 값 을 제한 하 는 것 입 니 다.주로 인 용 된 열 에 존재 합 니 다.다음 에 우 리 는 외부 키 제약 을 보 여 줍 니 다.우 리 는 다음 과 같은 직원 표 와 부서 표를 만 듭 니 다.

USE SQLStudy;
IF OBJECT_ID('dbo.Department','U') IS NOT NULL
 DROP TABLE dbo.Department
CREATE TABLE [dbo].[Department] (
 [DepartmentID] INT NOT NULL IDENTITY,
 [DepartmentName] VARCHAR(50)
)
GO
CREATE TABLE [dbo].[Employee] (
 [EmployeeID] INT NOT NULL IDENTITY,
 [FirstName] VARCHAR(50),
 [LastName] VARCHAR(50),
 [DepartmentID] INT
)
위 에서 우 리 는 고용원 표 가 부서 표 에 의존 하 는 것 을 알 고 있다.한 고용원 은 도대체 어느 부서 에 있 습 니까?그래서 이때 직원 표 중의 부서 Id 는 부서 표 중의 부서 Id 의 외 키 여야 한다.그 다음 에 우 리 는 외 키 제약 을 한다.다음 과 같다.

ALTER TABLE [dbo].[Employee]
ADD CONSTRAINT [FK_Employee_Department]
FOREIGN KEY ( [DepartmentID] ) REFERENCES [dbo].[Department] ( [DepartmentID] )
이 때 실행 을 마치 면 다음 과 같은 오 류 를 발견 할 수 있 습 니 다.

지금 우 리 는 외부 키 가 함부로 만들어 지 는 것 이 아니 라 는 것 을 알 고 있 습 니 다.왜 우리 가 부서 표를 인용 하고 직원 표 에서 부서 Id 를 외부 키 로 제약 하 는 오류 가 발생 했 습 니까?상기 오 류 를 통 해 우 리 는 인용 표 즉 부서 표 에 일치 하 는 메 인 키 나 후보 키 가 없다 는 것 을 알 고 있 습 니 다.이것 은 무엇 을 말 하 는 것 입 니까?인용 표 의 외 키 는 인용 표 의 전체 메 인 키 여야 한 다 는 뜻 입 니 다.인용 표 의 일부분 이 아니 라 인용 표 즉 부서 표 의 부서 Id 가 메 인 키 여야 한 다 는 뜻 입 니 다.여기 서 우 리 는 부서 표 의 부서 Id 에 대해 메 인 키 제약 을 하지 않 아 상기 오 류 를 초래 했다.저희 가 메 인 키 제약 조건 을 추가 하면 됩 니 다.

ALTER TABLE [dbo].[Department]
ADD CONSTRAINT [PK_Department] PRIMARY KEY ( [DepartmentID] )
GO
이때 외부 키 제약 이 완성 되 었 습 니 다.여기 에는 사실 우리 가 인용 해 야 할 표 에 메 인 키 가 존재 하 는 것 이 아니 라 외부 키 로 인 용 된 열 이 존재 할 수 있 습 니 다.이때 부서 표 의 Id 는 메 인 키 가 아니 라 우리 직원 표 의 부서 Id 는 부서 Id 를 외부 키 로 제약 해 야 합 니 다.이 럴 때 우 리 는 부서 표 에서 부서 Id 에 유일 하거나 유일한 제약 을 만 들 면 됩 니 다.

CREATE UNIQUE INDEX [IX_DepartmentID]
ON [dbo].[Department] ( [DepartmentID] )
GO
ALTER TABLE [dbo].[Employee]
ADD CONSTRAINT [FK_Employee_Department]
FOREIGN KEY ( [DepartmentID] ) REFERENCES [dbo].[Department] ( [DepartmentID] )
GO
유일한 구속

CREATE UNIQUE INDEX [IX_DepartmentID]
ON [dbo].[Department] ( [DepartmentID] )
GO
ALTER TABLE [dbo].[Employee]
ADD CONSTRAINT [FK_Employee_Department]
FOREIGN KEY ( [DepartmentID] ) REFERENCES [dbo].[Department] ( [DepartmentID] )
GO
검사 제약 조건
Check 제약 은 서술 어 를 정의 합 니 다.표 에 삽입 할 줄 이나 수 정 된 줄 은 이 요 구 를 만족 시 켜 야 합 니 다.
예 를 들 어 직원 표 에 월급 필드 를 추가 하면 월급 이 꼭 적당 해 야 한 다 는 것 이 분명 하 다.이때 우 리 는 다음 과 같이 Check 제약 을 할 수 있다.

ALTER TABLE dbo.Employees
ADD CONSTRAINT CHK_Employees_salary
CHECK(salary > 0.00)
부정 확 한 값 을 삽입 하려 고 하면 데이터베이스 에서 거부 합 니 다.우리 가 주의해 야 할 것 은 Check 제약 은 결과 가 false 여야 만 거부 할 수 있 습 니 다.결과 가 True 나 UNKNOWN 이면 받 아들 여지 고 결과 가 NULL 일 때 도 삽입 되 거나 수정 되 는 것 입 니 다.
기본 제약 조건
기본 제약 조건 은 표를 만 들 때 기본 값 을 정 하 는 것 입 니 다.흔히 볼 수 있 는 것 은 표 에 데 이 터 를 추가 하 는 날짜 라 는 열 이 있 습 니 다.이때 우 리 는 기본 값 을 완전히 정 하고 현재 날 짜 를 가 져 옵 니 다.기본 제약 조건 은 DEFAULT 키워드 로 표 시 됩 니 다.예 를 들 어 다음 과 같다.

ALTER TABLE dbo.Employees
ADD CONSTRAINT DFT_Employees_updateTime
DEFAULT(GETDATE()) FOR UpdateTime
총결산
이 절 에서 우 리 는 메 인 키 의 제약 과 유일한 제약 이라는 부분 을 상세 하 게 설명 했다.나머지 는 상대 적 으로 간단 하 다.생략 한 셈 이다.여기 서 끝내 고 다음 절 에 다시 만 나 자.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 서 교류 할 수 있 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다!

좋은 웹페이지 즐겨찾기