데이터베이스 디자인 (2 / 9): 도 메 인, 제약 및 기본 값 (Domains, Constraints and Defaults)
데이터베이스 개발 자 에 대해 SQL 데이터 유형 과 도 메 인 에 대한 명확 한 이 해 는 기본 적 인 요구 이지 만 기초 가 아니다.만약 당신 이 가장 적합 한 데이터 형식 을 선택 했다 면, 그것 은 많은 오 류 를 피 할 수 있 습 니 다.그 밖 에 제약 을 통 해 가능 한 한 정확 한 데이터 필드 를 정의 하면 이런 문 제 를 포착 할 수 있 습 니 다. 그러면 응용 개발 자의 업 무 를 괴 롭 힐 수 있 습 니까?
첫 번 째 편 에서 우 리 는 그것들 이 무엇 인지 데이터 원 이 라 고 명명 하고 분류 한다.그래서 지금 우 리 는 통용 되 는 신기 하고 보편적 인 'id' 를 데이터 원 으로 사용 할 수 없다 는 것 을 알 고 있다.그것 은 구조 에서 정확 한 의 미 를 가 진 정확 한 명칭 이 어야 한다.더 좋 은 것 은 명칭 은 기업 범위, 업계 범위 또는 전 세계 의 우선 순위 에 있어 야 한 다 는 것 이다.
두 번 째 편 에서 우 리 는 적당 한 도 메 인 을 선택 하여 그 데 이 터 를 컴퓨터 에 넣 기로 결정 할 것 이다.역 의 생각 은 코드 박사 로 돌아 가 야 한다.응, 사실 이 좋 은 박사 (Good Doctor) 전에 수학 에서 왔 으 니까.도 메 인 프로 그래 밍 의 데이터 형식 이지 만 더 많은 것 과 관련 이 있 습 니 다.도 메 인 은 값 에 합 법 적 으로 완 성 된 연산 자가 있 습 니 다. 그 밖 에 데이터 형식 이 있 습 니 다.예 를 들 어 나 는 INTEGER 를 사용 하여 데이터베이스 에 온 도 를 기록 할 수 있다.그것 은 데이터 형식 입 니 다.내 가 100 을 보 았 을 때, 그것 은 값 이 었 다.동시에 나 는 더하기, 빼 기, 곱 하기, 나 누 기 정 수 를 할 수 있 지만 온도 적 으로 이렇게 하 는 것 은 의미 가 없다.너 는 체온 이 36 ° 인 사람 을 함께 놓 고 물 을 끓 일 수 없다.모델 의 유형 은 어떤 조작 을 허용 할 지 결정 합 니 다.그러나 나 는 숫자 가 화 씨 도 (Fahrenheit (° F) 인지, 섭씨 도 (Celsius (° C) 인지, 절대 온도 (Kelvin (° K) 인지 알 아야 한다.그것 은 계량 단위 다.이것들 을 함께 놓 으 면 너 는 도 메 인 이 생 긴 다.
표준 SQL 은 CREATE DOMAIN 문 구 를 가지 고 있 습 니 다. 구조 대상 은 실제 도 메 인 이 아 닙 니 다.그것 은 단지 우리 가 곧 토론 할 줄 임 말 일 뿐이다.
SQL 에는 3 가지 데이터 형식 이 있 습 니 다.
문자열 형식 은 길이 와 길이 로 나 뉜 다.길이 문자열 은 CHAR (n) 과 NCHAR (n) 이 고 여기 (n) 는 길이 입 니 다.NCHAR (n) 은 'National Character' 의 약칭 으로 그 진정한 의 미 는 유 니 코드 가 이미 실행 한 모든 언어의 모든 문자 에서 나 온 것 이다.CHAR (n) 은 로 컬 ASCII 문자 집합 입 니 다.길 어 지 는 문자열 은 정 해진 문자 에 공백 문 자 를 추가 하지 않 습 니 다.열 에 대한 길이 와 문자 집합 을 선택 하 는 것 은 사용 하기 전에 정말 고려 해 야 할 제약 입 니 다.너무 짧 은 열 은 실제 데 이 터 를 막 고 너무 긴 열 은 허위 데 이 터 를 도입 한다.내 가 가장 좋아 하 는 기 교 는 NVARCHAR (255) 로 정 의 된 열 을 보고 중국어 심경 을 불 러 오 는 것 이다.이것 은 선종 불교 (Zen Buddhism) 의 경전 이다.만약 내 가 그들 에 게 SQL 을 가 르 칠 수 없다 면, 나 는 그것들 을 계몽 할 것 이다.
날짜 유형 은 순 날짜 시간 과 간격 유형 으로 나 뉜 다.날짜 시간 유형 은 날짜 와 시간 으로 나 뉜 다.그것 은 시간의 한 점 을 나타 낸다.날짜 유형 은 년, 월, 일 을 포함 합 니 다.시간 유형 은 시, 분, 초, 10 진법 의 차 초 를 포함한다.함께 놓 으 면 표준 SQL 에서 TIMESTAMP 데이터 형식 을 구성 하고 SQL Server 는 DATETIME 라 고 부 릅 니 다.간격 유형 은 하늘, 시, 분, 초의 시간 이 지 속 됩 니 다.SQL Server 는 이 를 특정 유형 으로 표시 하지 않 고 정수 함수 로 유사 한 결 과 를 얻 습 니 다.
모든 데이터 형식의 반올림 과 절단 에 대해 정 의 를 실현 합 니 다.모든 데이터 형식 은 NULL 을 허용 하 는 동시에 SQL 표준 에서 모든 데이터 형식 에 핵심 함수 가 있 고 모든 속성 확장 과 디 테 일 을 제공 합 니 다.예 를 들 어 SQL Server 는 BIT 데이터 형식 이 있 는데 정확 한 숫자 로 0, 1, NULL 값 만 허용 합 니 다.너 도 더 많은 데이터 형식 을 찾 을 수 있 지만, 이 '세 개의 값' 은 너의 대부분의 일 을 완성 할 것 이다.
데이터 에 있어 서 계산 을 하려 고 할 때 수치 형식 을 사용 하 십시오.수량, 개수, 합계 등 데이터 원 이라는 얘 기다.간단 한 가감 을 제외 한 계산 이 필요 하 다 면 반올림 과 넘 침 에 대해 추가 적 인 작은 숫자 를 정의 하 세 요.
정렬 할 애교 요?예 를 들 어 식당 의 성급 (예 를 들 어 1 성 은 2 성 이 좋 지 않 고 2 성 은 3 성 이 좋 지 않 은 것 으로 유추) 이다.계산 이나 비 교 를 하지 않 는 척도 에 수치 유형 을 사용 하지 마 세 요.이 오류 의 흔 한 예 는 우편 번호 (ZIP 코드) 입 니 다.첫 번 째 숫자 0 은 그 뜻 이 있 습 니 다. 그 위 에서 계산 할 수도 없고 정렬 할 수도 없습니다.라벨 수 는 등급 을 나타 내 는 데 쓰 인 다.
텍스트, 이름, 인 코딩 시스템 에 문자열 을 사용 하면 정규 표현 식 으로 표시 할 수 있 습 니 다.예 를 들 어 우편 번 호 는 CHAR (5) 로 정의 해 야 한다.그것들 을 계산 해 보지 마라;COBOL 에 서 는 되 고 SQL 에 서 는 안 됩 니 다.
날짜 데이터 에 날짜 데이터 형식 을 사용 합 니 다.맞 아, 너무 뻔 하 게 들 려 서 말 할 필요 도 없어.그러나 가장 흔히 볼 수 있 는 디자인 오 류 는 날짜 와 시간 데이터 에 문자열 을 사용 하 는 것 이다.물론 이렇게 하 는 사람 은 '2010 - 02 - 31' 과 같은 날 짜 를 막 거나 간단 한 시간 계산 함 수 를 하지 않 는 다.그들 은 전단 이 아 닌 디 스 플레이 형식 을 데이터베이스 에 넣 는 디자인 오 류 를 저 질 렀 다.
실수 와 시간 은 연속 적 인 예 이 고 다른 데이터 유형 은 분 산 된 것 이다.이산 범 위 는 두 개의 서로 다른 값 사이 에 제 한 된 숫자 이다.예 를 들 어 정수 {4, 9} 은 그들 사이 에 {5, 6, 7, 8} 이 있다.아이 칼 리 에 서 는 여자 MC 가 다른 아 이 를 설득 해 5 와 6 사이 에 Dirf 라 는 새로운 숫자 가 있다.이 농담 은 너무 우스꽝스럽다. 왜냐하면 그것 이 틀 렸 다 는 것 이 분명 하기 때문이다.
연속 성 은 수학 구조 로 두 개의 서로 다른 값 사이 에 무한 한 데이터 값 이 있다.너 는 항상 점점 더 많은 소 수 를 실수 나 아무런 제한 이 없 는 시간 에 추가 할 수 있다.부동 소수점 은 내부 건설 기능 으로 반올림 과 계산 문 제 를 처리 하지만 시간 데 이 터 는 안 된다.보통 이것 은 한 쌍 의 값 으로 사건 을 패턴 화 하 는 것 이다.이벤트 가 현재 상태 라면 종료 이벤트 값 으로 NULL 을 사용 합 니 다.그리고 응용 프로그램 에서 COALESCE () 함 수 를 사용 하여 NULL 을 CURRENT 로 바 꿀 수 있 습 니 다.DATE 또는 기타 의미 있 는 값.
제약 은 표 안의 열 상 기록 필드 의 한 원인 이다.구속 은 열 에서 값 을 제약 하 는 진술 문 이다.가장 중요 한 것 은 NOT NULL 입 니 다.처음으로 그것 으로 각 열 을 설명 한 다음 에 NULL 을 허용 하기 로 결정 하면 주석 줄 은 문맥 에 있 는 뜻 을 설명 합 니 다.예 를 들 면:
sale_start_date DATE NOT NULL,
sale_end_date DATE, – sale is still in progress CHECK (< 열 에 관련 된 서술 어 >) 는 가장 간단 한 줄 등급 제약 입 니 다.그러나 효과 적 인 서술 어 는 사용 할 수 있 고 전형 적 인 사용 은 다음 과 같다.
sex_code SMALLINT NOT NULL
CHECK (sex_code IN (0,1,2,9)),
body_temperature DECIMAL (3,1) NOT NULL
CHECK (body_temperature BETWEEN 0.0 AND 45.0),
airport_code CHAR(3) NOT NULL
CHECK (airport_code = UPPER (airport_code)),
zip_code CHAR(5) NOT NULL
CONSTRAINT Valid_ZIP_Code
CHECK (zip_code LIKE '[0-9][0-9][0-9][0-9][0-9]'), 위 와 같이 제약 조건 을 명명 할 수도 있다.잘못된 정 보 를 쉽게 읽 을 수 있 기 때문에 좋 은 방법 이다.CASE 표현 식 을 사용 하면 재 미 있 는 것 을 많이 얻 을 수 있 습 니 다. 다른 복잡 한 규칙 에 대해 if - then 논 리 를 사용 하 는 다른 서술 어, 예 를 들 어:
floob_score INTEGER CHAR(5) NOT NULL
CHECK (CASE WHEN floob_score NOT BETWEEN 1 AND 99 THEN 'F'
WHEN floob_score = 42
AND fuzz_nbr = 17
THEN 'T' ELSE 'F' END = T'), 숫자 인지 확인 하기 위해 서 CASE 표현 식 을 연습 합 니 다.표현 식 은 길 지만 어렵 지 않 습 니 다.
데이터 의 완전 성 을 제외 하고 구속 은 또 다른 좋 은 일 을 해 줄 것 이다.유 틸 리 티 는 검색, 삽입, 업데이트, 삭 제 를 향상 시 키 는 데 사용 할 수 있 습 니 다.전단 코드 를 많이 절약 해 준다.여기 서 한 번 에 해결 하면 많은 응용 프로그램 에서 반복 하지 않 아 도 됩 니 다. 지금 이 든 미래 든.그들 은 모든 전단 프로그램 이 똑 같이 정 의 된 데이터 원 을 사용 하도록 보장 한다.
CHECK () 제약 도 표 단계 에 놓 을 수 있다.예 를 들 면:
sale_start_date DATE NOT NULL,
sale_end_date DATE, – sale is still in progress
CONSTRAINT Validate_Sale_Duration
CHECK (sale_start_date <= sale_end_date), 표 제약 은 두 개 이상 의 열 에 관련된다.표준 SQL 에서 도 다른 표를 참조 하 는 CHECK () 제약 이 있 을 수 있 지만, 지금 은 이 걸 건 너 뛰 겠 습 니 다.SQL Server 가 아 닌 광범 위 하 게 응용 되 지 않 았 습 니 다.
SQL 의 정책 은 NULL 로 비교 할 때 논리 값 의 결 과 는 UNKNOWN 이지 TRUE 나 FALSE 가 아 닙 니 다.그러나 CHECK () 규제 에 서 는 TRUE 와 UNKNOWN 이 동등 하 게 대우 한다.우 리 는 질의 의 좋 은 점 을 UNKNOW 에 게 주 었 다.
줄 에서 정의 하 는 마지막 옵션 은 DEFAULT 자구 (기본 값) 입 니 다.기술적 으로 도 메 인 정의 의 구성 이 아니 라 매우 유용 하 다.표준 SQL 에 서 는 데이터 형식 후 바로 나타 납 니 다. 줄 정의 에 서 는 대부분의 배치 위치 가 자 유 롭 습 니 다.그것 은 상수 값 이나 데이터 형식 에 맞 는 시스템 값 입 니 다.가장 흔 한 예 는 인 코딩 구조 에서 숫자 와 문자열 데이터 의 기본 값, 날짜 데이터 에 대한 CURRENT 입 니 다.TIMESTAMP 와 CURRENTDATE。예 를 들 어 ISO 의 성별 인 코딩 은 0 을 '알 수 없 는', 1 은 '남성', 2 는 '여성', 9 는 합 법 적 인 사람 (lawful person) (기업 과 다른 조직 은 문맥 에서 '법인 (legal persons)' 으로 식별 합 니 다. 예 를 들 어 우 리 는 이렇게 설명 합 니 다.
sex_code SMALLINT NOT NULL
DEFAULT 0
CHECK (sex_code IN (0,1,2,9)),
sale_start_date DATE DEFAULT CURRENT_DATE NOT NULL 기본 값 의 목적 은 값 을 직접 주지 않 은 곳 에서 값 을 제공 하 는 것 입 니 다. 이것 은 보통 INSERT INTO 문 구 를 사용 하여 이 루어 집 니 다. 여기에서 줄 전 체 를 구축 해 야 하지만 모든 줄 을 사용자 에 게 노출 시 키 거나 프로 그래 밍 작업 을 절약 하고 싶 지 않 습 니 다. 기본 값 을 제공 하 는 것 은 불가능 합 니 다. 가끔 그렇게 합 니 다.
이제 줄 을 만 들 것 입 니 다. 세 번 째 편 에 서 는 표 에 줄 을 조합 해 야 합 니 다. 거기에 서 는 우리 가 제약 하 는 다른 유형 이 열 에 적 용 됩 니 다. 한 줄 만 이 아 닙 니 다.
원본 링크:
http://www.sqlservercentral.com/articles/Database+Design/69926/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.