ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스 테이블과 뷰(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는 현재 인스턴스의 데이터베이스의 정보와 상태를 보여주는 카탈로그 뷰다.

Designed by Tistory.