달력

04

« 2009/04 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

'2009/04/26'에 해당되는 글 2

  1. 2009/04/26 데이터베이스 구조 튼튼한지 확인(02)
  2. 2009/04/26 관계형이란(01)

튼튼한 구조 만들기


필드 정밀 조정
 
이름에 포함된 것?
  • 필드는 데이터베이스에서 가장 기초적인 구조임.
  • 점검 목록은 다음과 같다.
    • 이름이 설명적이고 전체 조직에서 의미가 있는가?
    • 필드 이름이 명확하고 명료한가?
      • 도시의 경우(EmpCity, CustCity 등)
    • 필드 이름으로 두문자어 또는 약어를 사용하고 있는가?
    • 한 가지 이상의 특성을 암시적 또는 명시적으로 식별하는 이름을 사용하고 있는가?
    • 마지막으로 필드 이름으로는 단수형을 사용할 것(복수형은 의미가 두 개이므로 단일 값을 나타내는 필드의 성격과 맞지 않음)

거친 모서리 다음기?

  • 필드가 테이블 주제의 특별한 특성을 나타내는지 확인.
  • 필드가 단일 값을 가지고 있는지 확인
    • 다중 값 필드 : 같은 값들의 여러 인스턴스를 잠재적으로 저장할 수 있는 필드
    • 다중 부분 필드 : 둘 이상의 서로 다른 값들을 잠재적으로 저장할 수 있는 필드
  • 필드가 계산이나 연결 결과를 저장하지 않는지 확인한다.
    • 계산값이 들어 있으면 수작업 또는 계산의 어떤 값이 변경될 때 마다 수행되는 절차적 코드가 필요해짐.
  • 필드가 전체 데이터베이스에서 단 한번만 나타나도록 한다.
    • 일관성 없는 데이터(다시 말해 데이터 변경시 다른 테이블의 해당 값을 잊어버리고 변경하지 못하는 실수가 발생하게 됨.)

다중 부분 필드 해결하기

  • 다중 부분과 다중 값 필드는 데이터 무결성을 깨뜨림.
  • 다중 부분 필드를 가지고 있는지는 어떻게 아는가?
    • "이 필드의 현재 값을 취해서 더 작고 확실한 부분들로 분할할 수 있을까?"
      • 예) 233 West Valley Hwy, San Diego, CA 92199

다중 값 필드 해결하기

  • 거의 예외 없이 여러 개의 쉼표를 포함함.(예: 727, 737, 757, MD80)
  • 데이터 무결성 문제에 직면할 경우가 발생함.
  • SQL 쿼리로 이 필드에 대한 검색과 정렬을 수행하기 어려움.
  • 다대다 관계 이므로 연결 테이블로 문제를 해결할 수 있음
    • 다중 값 필드와 원본 테이블의 주 키 필드의 복사본을 기초로 사용함.
    • 새 연결 테이블의 이름을 정하고 두 필드를 복합 주 키로 지정(양쪽 필드 값들의 결합만이 레코드를 유일하게 식별할 수 있음)

테이블 정밀 조정
이름에 포함된 것(두 번째)
- 정의에 의해 테이블 이름은 단일 주제를 나타내어야 한다.
- 만약 테이블 이름이 모호하거나 불명확하다면 테이블의 주제가 선정되지 않았다고 봄.

  • 이름이 고유하고 전체 조직에서 의미가 있을 만큼 충분히 설명적인가?
  • 이름이 정확하고 명확하고 모호하지 않게 테이블의 주제를 식별하는가?
  • 이름이 물리적 특성을 나타내는 단어를 포함하는가?
    • File, Record, Table과 같은단어는 피한다.
  • 테이블 이름으로 두문자, 약어를 사용하는가?
  • 암시적 또는 명시적으로 하나 이상의 주제를 식별하는 이름을 사용했는가?
    • and, or와 같은 단어, 백스페이스, 하이픈 등은 사용하지 않는다.
    • 테이블의 이름은 복수형을 사용한다.(Emplyees)

튼튼한 구조 확인하기

  • 테이블이 단일 주제를 나타내는지 확인한다.
  • 각 테이블이 주 키를 가지고 있음을 확인한다.
    • 테이블에 의해 표현되는 것들이 개체 또는 사건임을 기억.
  • 각 테이블이 주 키를 가지고 있음을 확인한다.
    • 첫 째 : 각 레코드를 유일하게 식별해줌
    • 둘 째 : 테이블 관계를 설정하는 데 사용.
  • 테이블이 다중 부분 또는 다중 값 필드를 포함하지 않는지 확인한다.
  • 테이블에 계산된 필드가 없는지 확인한다.
  • 테이블에 불필요한 이중(duplicate) 필드가 없는 지 확인한다.

불필요한 이중 필드 해결하기

[Staff]

StaffID  StaffFirstName StaffLastName  StaffStreetAddress  StaffCity  StaffState  <<other field>> 
 98014 James Leverling  722 Moss Bay Blvd.  Kirkland  WA  ... 
 98019 Laura  Callahan 901 Pine Avenue  Portland  OR  ..... 

[Classes] : 아래에서 빨간색 필드는 불필요.

ClassID Class ClassRoomID  StaffID  StaffLastName StaffFirstName  <<other field>> 
 1031 Art History 1231 98014 Leverling James ... 
 1030 Art History 1231 98014  Leverling James ..... 

위 테이블의 관계는 일대다 관계임. 따라서 클래스 테이블의 두 필드는 불필요.
관계형 데이터베이스에서 전체 데이터베이스에서 데이터는 오직 한번만 입력되어야 함.

식별하는 것은 키이다.

  • 테이블 내의 각 레코드를 유일하게 식별하고, 데이터베이스 전체에서 테이블을 공식적으로 식별.
  • 한 쌍의 테이블 사이의 관계를 설정하기도 함.
  • 주 키는 단순키와 복합키로 구성됨.(가능하면 주 키 사용)
  • 필드가 테이블 내의 각 레코드를 유일하게 식별하는가?
  • 필드가 고유한 값을 가지는가?
  • 필드가 미지의 값을 포함할 수 있는가?
  • 필드의 값이 선택적 일 수 있는가?
  • 다중 부분 필드인가?
  • 필드의 값이 언젠가 수정될 수 있는가?

견실한 관계 설정하기

  • 주 테이블의 주 키를 종속하는 테이블에 삽입(일대일 관계 설정)
  • 일(one) 측 테이블의 주 키를 다(many) 측 테이블에 삽입(일대다 관계 설정)
  • 연결 테이블을 만듬으로써 다대다 관계를 설정

삭제 규칙 설정하기

  • 일대일 관계에서 '주' 테이블의 레코드나 일대다 관계의 '일' 측 레코드를 삭제해야 고아 레코드 방지.
  • 제약과 연속 이라는 두 종류의 삭제 규칙을 지정할 수 있음.
    • 제약 삭제 규칙 - 일대일 관계나 일대다 관계에서 종속 테이블의 데이터를 삭제하지 못하도록 막는다. 요청 레코드 삭제전에 연관 레코드를 삭제하도록 한다.
    • 연속 삭제 규칙 - 일대일 관계에서 '종속' 테이블  또는 일대다 관계에서 '다' 측 테이블의 연관 레코드와 요청받은 레코드까지 삭제
    • 매우 신중하게 적용.
      • 질문 : 만약 고객 테이블에서 레코드가 삭제된다면 고객주문 테이블 내의 연관 테이블도 삭제 되어야 하는가?
        • 예 : 연속 삭제 규칙 적용
        • 아니오 : 제약 삭제 규칙 적용

참여 종류 설정하기

  • 다른 테이블에 레코드를 삽입하기 전에 그 테이블에 레코드가 있어야 하는지 여부를 결정.
    • 강제적 : 다른 테이블에 레코드를 입력하기 전에 이 테이블에 적어도 하나의 레코드가 반드시 있어야 함.
    • 선택적 : 다른 테이블에 레코드를 입력하기 전에 이 테이블에 어떤 레코드가 있어야 할 필요가 없음.
    • 다대다 관계에서 적용.

참여 수준 설정하기

  • 관계는 알았지만 수준은?
  • 다른 테이블의 단일 레코드에 연관될 수 있는 한 테이블의 최소 및 최대 레코드 수를 파악함으로써 수행.(참여수준을 식별)
  • 쉼표로 분리하고 괄호로 둘러싸인 두 개의 숫자로 표시.
    • (예 1, 12) - 참여 수준 연관 레코드가 1개이고, 최대 레코드 갯수가 12개임.


Reference : SQL Queries for Mere Mortals(운명적 존재를 위한 SQL 쿼리)

저작자 표시 비영리 변경 금지

'General Tech.' 카테고리의 다른 글

ASP.NET, Silverlight 관련 정보 공유  (0) 2009/08/29
MSDN 웹 캐스트 시리즈  (0) 2009/07/28
데이터베이스 구조 튼튼한지 확인(02)  (0) 2009/04/26
관계형이란(01)  (0) 2009/04/26
사용자 데이터베이스 이전하기.  (0) 2008/12/21
DAS  (0) 2008/11/30
Posted by -세티-
2009/04/26 19:26

관계형이란(01) General Tech.2009/04/26 19:26


데이터베이스의 종류

데이터베이스란? - 조직이나 조직 내의 프로세스를 모델링 하는데 사용하는 조직화된 데이터의 집합

운영 데이터베이
- 저장되는 데이터가 동적임.(소매점, 출판사, 제조업체, 병원과 클리닉 등)

분석 데이터베이스
- 역사적이고 시간에 의존적인 데이터를 저장하고 추적. 정적 데이터(화학 실험실, 지질학 회사, 마케팅 분석 등)

최초의 관계형 데이터베이스는?
- 1969년에 태동, 창시자는 에드거 F. 코드(IBM 연구소, 박사)
- 데이터 중복성, 취약한 데이터 무결성, 물리적 구현에 대한 데이터베이스 구조의 의존성 문제 해결을 위해 고민.
- 1970년 6월에 '대규모 공유 데이터뱅크를 위한데이터의 관계형 모델' 연구에서 관계형 모델 제시.
- 집합 이론과 1차 술어논리 라는 수학 분야를 기초에 둠.

관계형 데이터베이스 소프트웨어
- 19070년대의 메인 프레임 컴퓨터는 IBM이 개발한 System R과 버클리에서 개발된 INGRES를 사용.
- 메인 프레임용 RDBMS는 80년대의 오라클의 Oracle과 IBM의 DB2로 이어짐
- 이후 PC붐에 의해 dBase(에스톤 테이트), Paradox(앤사 소프트웨어), R:BASE(마이크로림) 가 등장
- 서버/컴퓨팅 개념에 의해 Oracle 8i와 MS의 SQL Server 7 등장
- 인터넷 시대에 웹 중심 데이터베이스 등장함, Cold Fusion(어르), Sybase(사이베이스), 비주얼 인터데브(MS)

관계형 데이터베이스의 해부
- 관계형 모델에서 관계형 데이터베이스 내의 데이터는 릴레이션내에 저장됨.
- 릴레이션은? - 투플(레코드), 속성(필드)로 구성됨.

테이블
- 데이터베이스의 주요 구조.
- 각 테이블은 항상 하나의 특정 주제를 나타냄.
- 각 테이블은 하나의 주 키(레코드 식별자)라는 필드를 포함함.
- 테이블이 나타내는 주제는 객체(Object) 또는 사건(Event)일 수 있음.
- 주제가 객체라면? 사람, 장소, 사물처럼 실제적인 것을 나타냄.
- 주제가 사건이라면? 주어진 시점에 발생한 어떤 것을 저장함.(재판 공청, 자금 배포, 실험 테스트 결과, 지질학
  조사등)

필드
- 데이터베이스의 가장 작은 구조
- 테이블의 주제의 한 가지 특성을 나타냄
- 데이터를 저장하는데 실제적으로 사용되는 구조.
- 필드 자체의 무결성과 데이터 무결성을 확인하는 데 바친 시간의 양 -> 정보의 질

레코드
- 테이블 주제의 고유한 인스턴스
- 테이블 내의 모든 필드로 구성(주제와 무관함)


- 테이블 내에서의 목적을 결정
- 주 키와 외래 키
- 주 키 : 테이블 내의 각 레코드를 고유하게 식별하는 하나의 필드 또는 필드 그룹
- 주 키의 중요성(2가지) : 전체 데이터베이스에서 특정 레코드를 식별하고 그 필드는 데이터베이스에서 주어진
                                   테이블을 식별함
- 데이터베이스 내의 테이블간 관계에서 주 키는 다른 테이블의 외래키가 됨으로써 관계를 설정하고, 관계 수준의
  무결성을 보장하는 데이 도움이 됨.


- 데이터베이스 내의 하나 이상의 테이블들의 필드로 구성되는 가상적인 테이블
- 기반 테이블(Base Table)로 구성함.
- 기반 테이블에서 데이터를 추출하여 정보를 여러 측면에서 볼 수 있도록 해주고 많은 융통성을 줌.
- 저장된 쿼리, 또는 쿼리라고 부름

관계
- 주어진 테이블의 레코드들을 다른 테이블의 레코드들과 연관을 맺게 하는 방법.
- 일대일, 일대다, 다대다 3가지 종류가 있음.
- 일대일 : 첫 번째 테이블의 한 레코드가 두 번째 테이블의 오직 한 레코드와 연관된 것(역으로도 마찬가지)
              관계에서 주 테이블(primary table)과 종속 테이블(secondary table)로 불림.
              외래키는 종속 테이블의 주키 역할도 수행함.
- 일대다 : 첫 번째 테이블의 한 레코드가 두 번째 테이블의 여러 레코드들과 연관될 수 있음.
              두 번째 테이블은 첫 번째 테이블의 한 레코드하고 밖에 연결이 안됨.
- 다대다: 첫 번째 테이블의 한 레코드가 두 번째 테이블의 여러 레코드와 관계를 가지고 거꾸고 두 번째 테이블의
              한 레코드가 첫 번째 테이블의 여러 레코드와 관계를 가짐. 
              이 관계를 설정하기 위해 연결 테이블(linking table)이 필요함.
              부적절하게 설정된 관계는 '해결되지 않는다.' -> 해결방법은? 연결 테이블은 만든다.
 
저작자 표시 비영리 변경 금지

'General Tech.' 카테고리의 다른 글

MSDN 웹 캐스트 시리즈  (0) 2009/07/28
데이터베이스 구조 튼튼한지 확인(02)  (0) 2009/04/26
관계형이란(01)  (0) 2009/04/26
사용자 데이터베이스 이전하기.  (0) 2008/12/21
DAS  (0) 2008/11/30
IF, InnerJoin, CASE 적용 프로시저  (0) 2008/11/30
Posted by -세티-