첫 번째 정규 형태

First normal form

첫 번째 정규 형태(1NF)는 관계형 데이터베이스에 있는 관계의 속성이다.관계는 속성 도메인이 요소로서 관계를 가지지 않는 경우에만 첫 번째 정상적인 형태다.[1]또는 비공식적으로 어떤 테이블 열도 값으로 테이블을 가질 수 없다(또는 반복 그룹이 없다).데이터베이스 표준화는 표준 정상 형태로 데이터베이스를 나타내는 과정이며, 여기서 첫 번째 정규식은 최소한의 요구 사항이다.SQL-92는 테이블 값 열 작성이나 사용을 지원하지 않으며, 이는 "전통적인 관계형 데이터베이스 기능"만 사용하는 것(나중에 표준화되었더라도 확장자를 제외함) 대부분의 관계형 데이터베이스는 필요에 따라 첫 번째 정상적인 형태가 될 것이라는 것을 의미한다.첫 번째 정상적인 형태가 필요하지 않은 데이터베이스 시스템을 no sql system이라고 부르는 경우가 많다.SQL:1999와 같은 새로운 SQL 표준은 복합 유형을 포함하는 소위 비원자 유형을 허용하기 시작했다.심지어 SQL:2016과 같은 새로운 버전도 json을 허용한다.

개요

IBM Information Management System과 같은 계층형 데이터베이스에서 레코드는 반복 그룹 또는 테이블 값 속성이라고 알려진 하위 레코드 집합을 포함할 수 있다.그러한 데이터 모델이 관계로 표현된다면, 반복 그룹은 값 자체가 관계인 속성이 될 것이다.첫 번째 정상적인 형태는 직접적인 봉쇄를 통해서가 아니라 외국의 키를 통해 부모 노선과 연관된 별도의 "상위 수준" 관계로 변화시킴으로써 중첩된 관계를 제거한다.

이 표준화의 목적은 유연성과 데이터 독립성을 높이고 데이터 언어를 단순화하는 것이다.또 중복과 이상 현상을 없애는 추가 정상화의 문을 열어준다.

대부분의 관계형 데이터베이스 관리 시스템은 중첩된 레코드를 지원하지 않으므로 테이블은 기본적으로 첫 번째 정상적인 형식이다.특히 SQL에는 중첩된 테이블을 생성하거나 악용할 수 있는 기능이 없다.따라서 데이터를 계층형 데이터베이스에서 관계형 데이터베이스로 이동할 때 첫 번째 정규화 작업이 필요한 단계가 될 수 있다.

이론적 근거

1NF로 정상화하는 근거:[2]

  • 정규 2차원 배열의 형태로 관계형 데이터를 표시, 저장 및 상호 교환할 수 있다.내포된 관계를 지원하려면 좀 더 복잡한 데이터 구조가 필요할 것이다.
  • 데이터 항목은 관계 이름, 속성 이름 및 키만으로 식별할 수 있으므로 데이터 언어를 단순화한다.중첩된 관계를 지원하려면 중첩된 데이터 항목을 다루기 위해 계층적 데이터 경로를 지원하는 보다 복잡한 언어가 필요할 것이다.
  • 외부 키를 사용하여 관계를 나타내는 것은 보다 유연하며, 계층적 모델은 일대다관계만을 나타낼 수 있다.
  • 데이터 항목을 찾는 것은 상위-하위 계층과 직접 연결되지 않기 때문에, 데이터베이스는 시간이 지남에 따라 구조 변화에 더 탄력적이다.
  • 데이터 중복 및 이상 징후를 제거하는 추가 표준화 수준 실현

단점과 비판

  • 특정 작업에 대한 성능.계층적 모델에서 내포된 레코드는 상위 레코드 뒤에 물리적으로 저장되며, 이는 전체 하위 트리를 단일 읽기 작업으로 검색할 수 있음을 의미한다.1NF 양식에서는 레코드 종류별로 조인 작업이 필요하며, 특히 복잡한 나무의 경우 비용이 많이 들 수 있다.이러한 이유로 문서 데이터베이스는 1NF를 준수한다.
  • 객체 지향 언어는 포인터나 참조에 의해 연결된 객체의 트리나 그래프로 런타임 상태를 나타낸다.이것은 1NF 관계형 데이터베이스에 깔끔하게 매핑되지 않으며, 때로는 개체-관계형 임피던스 불일치라고 불리는 문제, 그리고 어떤 ORM 라이브러리가 브리지하려고 하는지에 대한 문제가 있다.
  • 1NF는 값에 대해 복잡한 데이터 유형을 허용하지 않는 것으로 해석되었다.하지만 이것은 해석에 열려있다. 그리고 C.J.데일은 값이 임의로 복잡한 객체가 될 수 있다고 주장해 왔다.

역사

첫 번째 정상적인 형태는 E.F.에 의해 도입되었다.Codd는 "대규모 공유 데이터 뱅크의 데이터 관계 모델"이라는 논문에서 처음에는 "정상 형식"이라고 불렸지만,관계 모델의 추가 정규화 논문에서 정규화 양식이 추가 소개되면서 "최초 정규화 양식"으로 명칭이 변경되었다.

예

다음 시나리오는 먼저 데이터베이스 설계가 첫 번째 정규 형식을 위반할 수 있는 방법을 설명하고, 그 다음에 준수하는 예를 제시한다.

1NF를 위반하는 설계

고객의 신용카드 거래에 대한 이 표는 첫 번째 정상적인 형태와 일치하지 않는다.

고객 고객ID 트랜잭션
아브라함 1
트랜잭션 ID 날짜 금액
12890 2003년 10월 14일 −87
12904 2003년 10월 15일 −50
아이작 2
트랜잭션 ID 날짜 금액
12898 2003년 10월 14일 −21
제이콥 3
트랜잭션 ID 날짜 금액
12907 2003년 10월 15일 −18
14920 2003년 11월 20일 −70
15003 2003년 11월 27일 −60

각 고객에게 트랜잭션의 '반복 그룹'에 대응한다.SQL은 중첩된 테이블을 지원하지 않기 때문에 이러한 설계는 계층형 데이터베이스로 나타낼 수 있지만 SQL 데이터베이스는 표시할 수 없다.

고객의 거래와 관련된 모든 질의에 대한 자동평가는 크게 두 가지 단계를 포함한다.

  1. 그룹 내 개별 트랜잭션을 검사할 수 있도록 하나 이상의 고객 트랜잭션 그룹의 압축을 풀고
  2. 첫 번째 단계 결과에 기반한 쿼리 결과 도출

예를 들어, 모든 고객에 대해 2003년 10월에 발생한 모든 거래의 금전적 총액을 알아내기 위해, 시스템은 먼저 각 고객의 거래 그룹을 푼 다음, 2003년 10월에 거래 일자가 있는 곳에서 얻은 모든 거래의 금액을 합산해야 한다는 것을 알아야 할 것이다.

Codd의 중요한 통찰 중 하나는 구조적 복잡성을 줄일 수 있다는 것이었다.구조적 복잡성 감소는 사용자, 애플리케이션 및 DBMS가 쿼리를 공식화하고 평가할 수 있는 더 많은 힘과 유연성을 제공한다.위의 구조물과 더 정규화된 등가물이 다음과 같이 보일 수 있다.

1NF를 준수하는 설계

모형을 첫 번째 정규 형태로 만들기 위해 정규화를 수행할 수 있다.정규화(첫 번째 정규형태로)는 단순하지 않은 도메인을 가진 속성을 추출하여 독립적 관계를 분리하는 과정이다.추출된 관계는 포함된 관계의 주요 키를 참조하는 외국 키로 수정된다.이 프로세스는 여러 레벨에 중첩된 단순하지 않은 도메인에 반복적으로 적용될 수 있다.[4]

이 예에서 고객 ID는 포함된 관계의 주요 키이므로 새로운 관계에 외래 키로 추가된다.

고객 고객ID
아브라함 1
아이작 2
제이콥 3
고객ID 트랜잭션 ID 날짜 금액
1 12890 2003년 10월 14일 −87
1 12904 2003년 10월 15일 −50
2 12898 2003년 10월 14일 −21
3 12907 2003년 10월 15일 −18
3 14920 2003년 11월 20일 −70
3 15003 2003년 11월 27일 −60

수정된 구조에서 기본 키는 첫 번째 관계에서는 {Customer ID}, 두 번째 관계에서는 {Customer ID, Transaction ID}입니다.

이제 각 행은 개별 신용카드 거래를 나타내며, DBMS는 단순히 10월에 해당하는 날짜가 있는 모든 행을 찾아 그들의 금액을 합하면 관심의 답을 얻을 수 있다.데이터 구조는 모든 값을 동일한 기준으로 배치하여 각 값을 DBMS에 직접 노출하므로 각 값은 잠재적으로 쿼리에 직접 참여할 수 있는 반면, 이전 상황에서는 일부 값이 특별히 취급되어야 하는 하위 수준 구조에 내장되어 있었다.따라서 표준화된 설계는 범용 쿼리 처리에 그 자체를 빌려주는 반면, 비표준화된 설계는 그렇지 않다.

이 설계는 두 번째 및 세 번째 정규 형태에 대한 추가 요건을 충족한다는 점에 유의할 필요가 있다.

원자성

에드가 F. Codd의 1NF 정의는 '원자성'의 개념을 참조한다.Codd 보고서는"각각의 관계가 정의되어 있는 영역에서 값은 DBMS에 대하여 원잘 필요가 있다."[5]커든 칼럼 부분으로 다 이상의 한 종류로 나뉠 수 없음을 의미하"DBMS은에 의해 작은 조각들로 분해할 수 없(제외하고 특수한 기능)"[6]로 원자 값을 규정한다.분명에한 부분이 DBMS에 의미하는 것은 동일한 열의 다른 부분에 의존한다.

휴 다웬과 크리스 다테는 Codd의 '원자 가치' 개념은 모호하며, 이러한 모호성으로 인해 1NF를 어떻게 이해해야 하는지에 대한 혼란이 널리 퍼졌다고 제안했다.[7][8]특히, "분해될 수 없는 가치"라는 개념은 문제가 있는데, 이는 소수의 데이터 유형만 원자적이더라도 이를 암시하는 것처럼 보이기 때문이다.

  • RDBMS는 일반적으로 운영자에게 문자열을 하위 문자열로 분해하도록 제공하기 때문에 문자열이 원자 문자열이 아닌 것 같다.
  • RDBMS는 일반적으로 운영자에게 정수와 분수 성분으로 분해하도록 제공하기 때문에 고정점수는 원자점이 아닌 것 같다.
  • ISBN은 언어와 출판사 식별자를 포함하기 때문에 원자성이 아닌 것처럼 보인다.

날짜는 "원자성의 개념은 절대적인 의미를 가지고 있지 않다"[9][10]는 것을 암시한다: 값은 어떤 목적에서는 원자적인 것으로 간주될 수 있지만, 다른 목적에서는 더 기본적인 요소들의 집합으로 간주될 수도 있다.이 위치가 허용되면 원자성을 기준으로 1NF를 정의할 수 없다.상상할 수 있는 모든 데이터 유형(현열 유형과 숫자 유형에서 배열 유형 및 테이블 유형까지)의 열은 1NF 표에서 허용된다. 예를 들어, 고객 이름 열을 이름, 성으로 구분하여 두 개의 별도 열로 구분하는 것이 더 바람직할 수 있다.

관계를 나타내는 1NF 표

다테의 정의에 따르면, 표는 "어떤 관계와 이형성"인 경우에만 첫 번째 정상적인 형태로, 구체적으로 다음과 같은 다섯 가지 조건을 만족한다는 것을 의미한다.[11]

  1. 행에 대한 상하의 순서가 없다.
  2. 기둥에 좌우를 주문할 순 없어
  3. 중복 행은 없다.
  4. 모든 행과 열 교차로에는 해당 도메인에서 정확히 하나의 값이 포함된다(다른 것은 없음).
  5. 모든 열은 정규 [즉, 행 ID, 객체 ID 또는 숨겨진 타임스탬프와 같은 숨겨진 구성요소가 행에 없음]이다.

이러한 조건 중 하나를 위반하면 테이블이 엄격하게 관계성이 없으며 따라서 테이블이 첫 번째 정상적인 형태가 아니라는 것을 의미한다.

첫 번째 정규 형식의 정의를 충족하지 못하는 표(또는 뷰)의 예는 다음과 같다.

  • 고유한 키 제약 조건이 없는 테이블.그러한 테이블은 조건 3을 위반하여 중복 행을 수용할 수 있다.
  • 정의에서 특정 순서로 결과를 반환해야 하므로 행 순서가 보기의 본질적이고 의미 있는 측면이 되도록 하는 보기입니다.(SQL:2003 표준을 준수하는 SQL을 사용하여 이러한 보기를 생성할 수 없음)이것은 조건 1을 위반한다.진정한 관계의 튜플은 서로에 대한 존중으로 주문되지 않는다.
  • 하나 이상의 null 가능 속성이 있는 테이블.무효화 특성은 조건 4를 위반할 수 있으며, 이 경우 모든 열은 해당 열의 도메인에서 정확히 하나의 값을 포함해야 한다.조건 4의 이러한 측면은 논란의 여지가 있다.그것은 무효에 대한 명시적인 조항을 만든 관계형 모델에 대한 Codd의 나중의 비전에서 중요한 이탈을 나타낸다.[12][13]Chris Date에서 정의한 첫 번째 정규 형태는 관계 값 속성(테이블 내의 테이블)을 허용한다.다테는 테이블 안의 열이 테이블을 포함할 수 있는 방법으로 관계 값 속성이 드물게 유용하다고 주장한다.[14]

참조

  1. ^ Codd, E.F (1970년)"대규모 공유 데이터 뱅크의 데이터 관계 모델"ACM의 통신.고전. 13: 377–87. 페이지 380-381
  2. ^ Codd, E.F (1970년)"대규모 공유 데이터 뱅크의 데이터 관계 모델"ACM의 통신.고전. 13: 377–87.
  3. ^ Codd, E. F. (1971)관계 모델의 추가 표준화.R, 러스틴이 편집한 데이터 베이스 시스템의 Courant 컴퓨터 과학 심포지엄 6
  4. ^ Codd, E.F (1970년)"대규모 공유 데이터 뱅크의 데이터 관계 모델"ACM의 통신.고전. 13: 377–87. 페이지 381
  5. ^ Codd, E. F.데이터베이스 관리 버전 2를 위한 관계 모델(Addison-Wesley, 1990).
  6. ^ Codd, E. F.데이터베이스 관리 버전 2를 위한 관계 모델(Addison-Wesley, 1990), 페이지 6.
  7. ^ 다웬, 휴.C. J. Date와 Hugh Darwen, Relational Database Writes 1989-1991(Addison-Wesley, 1992년)에서 "관계 가치 속성(Relative-Value Attributes; 또는 "실제 첫 번째 정상 폼이 일어나 주시겠습니까?"
  8. ^ Date, C. J. (2007). What First Normal Form Really Means. Date on Database: Writings 2000–2006. Apress. p. 108. ISBN 978-1-4842-2029-0. '[F]or many years,' writes Date, 'I was as confused as anyone else. What's worse, I did my best (worst?) to spread that confusion through my writings, seminars, and other presentations.'
  9. ^ Date, C. J. (2007). What First Normal Form Really Means. Date on Database: Writings 2000–2006. Apress. p. 112. ISBN 978-1-4842-2029-0.
  10. ^ Date, C. J. (6 November 2015). SQL and Relational Theory: How to Write Accurate SQL Code. O'Reilly Media. pp. 50–. ISBN 978-1-4919-4115-7. Retrieved 31 October 2018.
  11. ^ Date, C. J. (2007). What First Normal Form Really Means. Date on Database: Writings 2000–2006. Apress. pp. 127–128. ISBN 978-1-4842-2029-0.
  12. ^ Date, C. J. (2009). "Appendix A.2". SQL and Relational Theory. O'Reilly. Codd first defined the relational model in 1969 and didn't introduce nulls until 1979
  13. ^ Date, C. J. (October 14, 1985). "Is Your DBMS Really Relational?". Computerworld. Null values ... [must be] supported in a fully relational DBMS for representing missing information and inapplicable information in a systematic way, independent of data type. (Codd의 12가지 규칙 중 세 번째 규칙)
  14. ^ Date, C. J. (2007). What First Normal Form Really Means. Date on Database: Writings 2000–2006. Apress. pp. 121–126. ISBN 978-1-4842-2029-0.

추가 읽기