-
데이터베이스 테이블과 뷰(2020.06.10)데이터베이스 2020. 6. 10. 17:20
테이블
새 데이터베이스 생성
위와 같이 만들어진 테이블을 새로 만들어진 데이터 베이스에 복사할 수 있다.
테이블 우클릭 새로운 테이블 생성
기본키로 지정하면 NULL 허용이 체크 해제된다.
IDENTITY의 옵션 자동 증가( 예 ) 허용
테이블 및 열 사양 오른쪽 설정창 클릭
기본키와 외래 키 설정
만약 안될 경우 도구-> 옵션-> 디자이너 -> 테이블 옵션 -> 테이블을 다시 만들어야 하는 변경 내용 저장 안 함 체크 해제
마우스 클릭으로 관계 설정
화살표 우클릭 - 속성 기본키와 외래 키를 볼 수 있다.
데이터 베이스의 가장 중요한 요소는 무결성
특정 데이터를 입력할 때 무조건 입력되는 것이 아니라, 어떠한 조건을 만족했을 때에만 입력되도록 제한하는 것,
제약 조건 6가지
- PRIMARY KEY 제약조건
- FOREIGN KEY 제약조건
- UNIQUE 제약 조건
- CHECK 제약 조건
- DEFAULT 정의
- NULL 값 허용
*********기본 키 제약 조건***********
기본 개념
- 테이블의 각 행들을 구분할 수 있는 식별자
- 중복될 수 없고 NULL 값이 입력될 수 없다.
- 기본키로 설정하면 자동으로 클러스터형 인덱스가 생성됨.
- 기본키는 하나의 열 또는 여러 개의 열을 합쳐서 설정할 수는 있으나, 한 개만 설정할 수 있다.
현대 데이터베이스에는 무조건 하나 이상의 기본 키가 존재한다.
CONSTRAINT (제약조건) 제약조건 명시할 때 사용
ALTER TABLE로 추후에 기본키를 넣을 수 있다.
만든 테이블에 대한 정보
외래 키가 어디에 참조되어 있는지도 나온다.
외래키
두 테이블 간의 관계를 선언함으로써 데이터의 무결성을 보장해 줌
외래키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 된다.
'외래 키 테이블'에 데이터를 입력할 때는 꼭 '기준 테이블'을 참조해서 입력하므로, '기준 테이블'에 이미 데이터가 존재해야만 한다.
회원들만 살 수 있는 쇼핑몰이라면 회원이 아니라면 userTBL 아이디가 없으면 못 산다.
FORIEGN KEY REFERENCES userTbl(userID)
Unique
중복되지 않는 유일한 값을 입력해야 함
Primary Key 제약조건과 거의 비슷하며 차이점은 Null 값을 허용 (단 1개만)
회원 테이블의 예를 든다면 주로 email 주소를 Unique로 설정하는 경우가 많다.
CREATE TABLE userTBL
(
email char(30) NULL UNIQUE
)
우클릭 -> 인덱스/키
위와 같이 설정을 바꾸고 이름도 바꾼다.
위의 INSERT문을 한번 실행한 뒤, 한 번 더 실행하면 위와 같은 에러가 뜬다. 첫 번째, 에러는 기본키 정책 위반이고 밑에 줄은 그 이유는 UNIQUE로 설정된 e-mail을 똑같은 이메일을 한번 더 INSERT 한다면 에러가 뜬다. 위와 같은 방법으로 하면 오류가 오질 나게 많이 떴다. 웬만하면 CREATE TABLE 할 때 UNIQUE를 쓰자.
CHECK 제약조건
ALTER TABLE userTBL
ADD CONSTRRAINT CK_height
CHECK (birthYear >= 1900 AND birthYear <=YEAR(GETDATE());
1900~현재까지 출생 연도를 입력할 수 있다.
DEFAULT
기본 값을 의미한다. 아무것도 안 넣었을 때 값이 들어가도록 하는 부분이다.
디폴트 값 설정
NULL 값 허용
위와 같은 것들을 쓰면 무결성에 부합하는 데이터들을 집어넣을 수 있다.
스파스 열 별로 쓸 일 없다.
테이블 삭제할 때는 자식 먼저 삭제하고 부모를 삭제한다.
테이블 수정 : 마우스로 하자
스키마
형식 : 데이터베이스_이름. 스키마_이름. 개체_이름
스키마는 데이터베이스 내에 있는 개체들을 관리하는 묶음
스키마 이름을 생략하면 자동으로 디폴트 스키마인 'dbo'를 자동으로 붙여준다.
사용자가 직접 스키마를 생성하고 지정할 수 있음,
다른 데이터베이스에 있는 다른 테이블을 불러오고 싶을 때, 위와 같이 실행한다.
스키마는 강력하게 묶는 개념이라기보다는 관리의 편리를 위해서 가볍게 테이블을 묶어준다고 생각하는 것이 좋다.
뷰
뷰는 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체다. 뷰는 한 번 생성하면 테이블이라고 생각하고 사용해도 될 정도로 사용자의 입장에서는 테이블과 거의 동일한 개체로 여겨진다.
SELECT * FROM V_userTBL; 실행
장점
- 보안에 도움이 된다. Encryption 보안보안보안보안
- 복잡한 쿼리를 단순화시킬 수 있다.
수십번 수백번 쓸 쿼리를 뷰로 만들어놓고 쓰면 좋다.
뷰에 INSERT하지마라 보기만해라.
표준 뷰
한개 또는 그 이상의 테이블을 이용해서 만든 뷰
분할 뷰
한대 또는 여러 대의 서버에 있는 테이블을 조인해서 하나의 테이블처럼 보이도록 하는 뷰를 분할 뷰라고한다.
서울 데이터베이스 부산 데이터베이스 -> 조인 분산 데이터베이스를 할 때 봐야 한다.
인덱싱된 뷰
인덱싱된 뷰는 예외적으로 테이블처럼 실제 데이터가 뷰에 들어있다. 단점으로 대량의 데이터를 조인하는 경우 서버에 부하가 많이 걸린다. 그닥 안쓰임.
시스템 뷰
SQL 서버의 상태 및 내부의 정보를 관리하기 위한 시스템 테이블을 가지고 있다. 시스템을 건드리면 큰일 나기 때문에 시스템에 대한 정보를 보고 싶을 때 시스템 뷰를 사용해서 볼수 있도록 해주는 것들이 시스템 뷰이다.
SELECT * FROM sys.databases는 현재 인스턴스의 데이터베이스의 정보와 상태를 보여주는 카탈로그 뷰다.
'데이터베이스' 카테고리의 다른 글
데이터베이스 커서 트리거 전체 텍스트 검색(2020.06.12) (0) 2020.06.12 데이터베이스 인덱스, 트랜잭션, 저장 프로시저(2020.06.11) (0) 2020.06.11 데이터베이스 조인 조건 반복 동적(2020.06.10) (0) 2020.06.10 데이터베이스 Transact-SQL 기본, 고급(2020.06.09) (0) 2020.06.09 데이터베이스 Transact-SQL 기본 (2020.06.08) (0) 2020.06.08