第1正規形:明確な定義


9

第一正規形とは何かの決定版を取得しようとしています。私が読んだものはすべて、少し異なるスピンを持っています。

日付などの多くの当局は、定義によって関係は常に第1正規形であると言いますが、他の当局は要件のリストを提供します。つまり、1NFの要件は0から多くあります。

違いは、テーブルとリレーションの間の違いだと思います。テーブルは完全に混乱する可能性がありますが、リレーションシップは特定の制限に従います。したがって、リレーションがSQLでテーブルとして表されるという事実により、混乱が生じます。

SQLデータベースに関連するため、特に1NFに焦点を当てています。問題は、テーブルが最初の正規形であることを保証するために必要なプロパティは何ですか?


多くの当局は、表が関係を表す場合、それはすでに1NFにあると示唆しています。これにより、1NFの定義が関係の定義に戻ります。

1NFのテーブルのいくつかのプロパティは次のとおりです。

  • 列の順序は重要ではありません[1]
  • 行の順序は重要ではありません
  • すべての行は同じ長さです(つまり、行データは列ヘッダーと一致します)
  • 重複行はありません(これは代理主キーを使用して保証できますが、PK自体は必要ありません)
  • 繰り返し列はありません
  • 各列には単一の値(アトミック)が含まれています

[1]技術的には属性は順序付けされていませんが、テーブルでは、行データは列ヘッダーと同じ順序である必要があります。ただし、実際の順序は重要ではありません。

上の複数のデータ

アトミックデータの概念は、アイテムをさらに分解することはできないということです。この概念は、技術的にはすべて吐き気を分解することができますが、問題のデータは、データの使用方法によっては、実際にはそれ以上分解できないという点で評価されています。

たとえば、通常、完全な住所または完全な名前はさらに分解する必要がありますが、名前や町の名前などのコンポーネントは、文字列として使用できるという事実にもかかわらず、おそらくこれ以上分解すべきではありません。

列を繰り返すように、それが持っている貧弱な設計カラムでほぼ等列、繰り返しphone1phone2一般に等、繰り返されるデータは、追加の関連テーブルの必要性を示しています。

依存

同じヘッダーに準拠していることを除いて、行間に関係があってはなりません。

列の間にも関係があってはなりませんが、それがより高い正規形の主題であると私は信じています。

問題は次のとおりです。1NFの定義には上記のどれくらいが含まれていますか?独立した行ビットもそれに含まれますか?

回答:


7

予備

正規形の定義(1971年の「データベースリレーショナルモデルのさらなる正規化」の提示から、最初の正規形として知られています)とリレーショナルパラダイム自体の定義は、1970年に強力なデータベース管理の実践のための基盤、すなわち、「大規模な共有データバンクについて、データのリレーショナル・モデルA」(略してRM)はによって作成された博士はEFコッドチューリング賞の受取人とされ、リレーショナルフレームワークに関して権限。

はい、コッド博士のテキストについての説明、解釈、解説、逸脱、意見はたくさんありますが、私は個人的には元の情報源にこだわることを好み、自分で結論を導き出すために自分で分析することを強くお勧めします。

私は確かにRMの全体を理解していませんが、RMについて理解していることは、その卓越性、ビジョン、意図、および範囲を評価することを可能にします。とにかく、その天才と優雅さ。その分野では、RMは独自の方法で時の試練に耐え、比類のないままです。

前述の不正確さを強調する行為は、「慈善用語を使用して」不公平になります。かなりの距離から見ると、この独創的な資料にはいくつかの改良と拡張が必要でしたが、作品の本体は非常に概念的です(そして、実際、コッド博士は、すべてではないにしても、そのような改良と拡張の大部分を自分で行いました)。

私は、この例外的な知識源に対する私の理解を深めるために、RMを絶えず読み直しています(そして、私の再評価は、再読のたびに増え続けています)。目的は巨人の肩の上に立つことです。

リレーションとテーブル

関係は抽象的なリソースであるため、コッド博士はそれらを表形式で表すことの有用性を思い描いたことが重要です(最初は「配列表現」という用語を使用しましたが、その後「テーブル」または「rテーブル」を使用しました)。リレーショナルデータベース(RDB)のユーザー、設計者、および管理者は、より親しみやすい方法または具体的な方法でそれらにアプローチできます。したがって、RDB実装のコンテキスト内では、リレーションの省略形としてテーブルを使用することが有効です、上記の表が実際の関係を表す限り。この機能は(明らかではありますが)非常に重要です。これは、テーブルが第1正規形(1NF)に準拠するリレーションを表すかどうかを評価する前に、リレーションを正確に表す必要があるためです。

RMには当然、テーブルが実際に関係を表すかどうかを決定するために必要な品質が含まれていますが、ここではそれらについて非公式で気取らない解釈を提供します(別のもの、はい!):

  • 名前が必要です(データベース構造内の特定の関係は、他の関係と区別する必要があります)。
  • その各行は、関連する関係の1つのタプルを正確に表す必要があります。
  • 行の順序はまったく重要ではありません。
  • それぞれの列には、関係する関係の正確に1つのドメインの意味を表す名前が必要であり、その名前は、テーブルの残りの列の名前とは異なる必要があります(列は一意に区別され、独特の意味、そしてはい、データベースモデラーとビジネスエキスパートが果たす重要な各ドメインを正確に定義する役割が最も重要です)
  • 列の順序は重要ではありません。
  • すべての行の列数は同じでなければなりません。
  • これは持っている必要があり、少なくとも1つの一意の行を介して示されたタプルのすべてのいずれかを識別すること、列または列のいずれかの組み合わせを、このように、すべての行は異なる必要があります(そうです、これは少なくとも1つのKEYを宣言することの重要性を強調し、2つ以上のKEYがある場合、実用的な理由に基づいて1つをPRIMARYとして定義する必要がありますが、残りはALTERNATEと見なされますが、決定する前は、各KEYはPRIMARYとしての定義の「候補」でした。

実際にリレーションを表すテーブルを持つことは、それがリレーショナルな種類の操作操作を受けたときに結果が再びリレーションを表すテーブルになるため、重要です。このようにして、上記のテーブルの動作は予測可能です。

原子ドメイン(列)

RMの最初のセクションでは、いくつかの概念を紹介するために、コッド博士が関係のサンプルをいくつか紹介しています。したがって、アトミックドメインの意味を理解するために、いくつかの適切な点を詳しく説明するRMからの次の抜粋から始めましょう。

これまで、単純なドメイン(要素がアトミック(非分解)値であるドメイン)で定義されている関係の例について説明してきました。非原子値は、リレーショナルフレームワーク内で議論できます。したがって、一部のドメインは、要素として関係を持つ場合があります。これらの関係は、次に、単純でないドメインなどで定義できます。

このようにして、前述の説明関係のそれぞれは、2種類のいずれか、つまり種類Aまたは種類Bのいずれかに適合すると言えます。

  • 種類Aは、タプル(行)のすべてに単純な値のみを含むドメイン(列)で構成された関係(テーブル)のみをグループ化します。このコンテキストは、値を連続的に新しい関係(テーブル)に分解できないため、値がアトミックであることを意味します。したがって、このクラスの関係は正規化されたものであり、つまり1NFに準拠しており、その形式が望ましいです。

  • 種類Bは、関係をそれぞれのタプル(行)の値として保持する1つ以上のドメイン(列)を持つ関係(テーブル)によって排他的に統合され、その後、新しい関係に分解できるため、これらの値は非アトミックであることを示します(テーブル)、つまり、それらは分解可能です。したがって、この種の関係は正規化されていません。つまり、それらは1NFを侵害しており、望ましくない形式です。

正規化

コッド博士は、RMの正規化に関するセクションを次の段落で紹介します。

ドメインがすべて単純なリレーションは、前述の種類の2次元の列の均一な配列によってストレージに表現できます。1つ以上の単純でないドメインとの関係には、さらに複雑なデータ構造が必要です。この理由(および以下で引用する他の理由)により、単純でないドメインを排除する可能性は調査する価値があるようです!実際、非常に単純な除去手順があり、これを正規化と呼びます。

それから彼は示し続けます:

  1. 1つが正規化されていない関係のグループ(関係を値として含むドメインがあります。つまり、関係は非原子的です。つまり、単純ではありません)

  2. 正規化されたリレーションのグループ(つまり、分解されたリレーションのグループ。つまり、リレーション値のドメインが、それらがアトミックであることを示す単純なものに分解されたもの)

そして、彼は正規化されていない関係から正規化された関係を取得するための手順を説明します。

この点で、彼が正規化の演習を説明するために採用した関係と演習の説明自体は非常に明確です。これらを自分で分析することをお勧めします(これにより、一部の読者が本文に取り組むようになることを願っています)。

彼は次のように指摘している。

正規化の種類のさらなる操作が可能です。これらについては、このホワイトペーパーでは説明しません。

また、上記の操作、つまり第2および第3の正規形(2NFおよび3NF)は、実際には「データベースリレーショナルモデルのさらなる正規化」に詳述されており、前述のように、このペーパーのプレゼンテーション(および後の印刷と公開)の後に記載されています。 、元の正規形は最初の正規形として知られるようになりました。

開業医が観察できるように、正規化されていない関係(テーブル)があると、RDBの実装に(ほとんど常に不必要な)たたみ込みが発生します。

1NFを満たすリレーションは、非正規化リレーション(テーブル)に必要なものよりも複雑ではないデータサブ言語によって実装できる制約とデータ操作操作の定義を容易にします。コッド博士は次の行で指摘しています。

上記のように、データのリレーショナルモデルを採用すると、適用された述語計算に基づいてユニバーサルデータサブ言語を開発できます。関係のコレクションが正規形である場合は、1次述語計算で十分です。そのような言語は、他のすべての提案されたデータ言語に言語力の尺度を提供し、それ自体がさまざまなホスト言語(プログラミング、コマンド指向、または問題指向)に埋め込む(適切な構文修正を伴う)の強力な候補になります。[…]

[…]

データサブ言語の普遍性は、その記述能力(計算能力ではない)にあります。

困惑

私の視点から、困惑が生じた、により1NF約等解釈、説明、前述の過剰、()にRM自体、及びためする(b)はさらに試行の再定義の関係を有すること1NFにその状態をそれらが対応する各タプルの単一の値である限り、関係が1NFに準拠する値を保持するドメインを使用します。

あなたの他のポイントについての私の見解

同じヘッダーに準拠していることを除いて、行間に関係があってはなりません。

そのステートメントの意図を正しく理解しているかどうかはわかりませんが、同じヘッダーに準拠することとは別に、リレーション(テーブル)の(タプル)行の間には接続が必要です。関係(テーブル)が表すことになっている特定のエンティティタイプ(関心のあるビジネスコンテキストの観点から定義)の特定の発生

列の間にも関係があってはなりませんが、それがより高い正規形の主題であると私は信じています。

そのステートメントの意味を適切に解釈しているかどうかはわかりませんが、実際には、前の側面への私の回答に従って、リレーション(テーブル)のドメイン(列)の間にもリレーションシップが必要です、これがリレーションリレーショナルモデルと具体的なRDB実装の基本構造)である理由です。

例証するために、架空の関係(表)に関して

  • Salary (PersonNumber, EffectiveDate, Amount)

タプル(行)

  • Salary (x, y, z)

意味を伝えます

  • The Salary payed to the Person identified by PersonNumber x, on EffectiveDate y corresponds to the Amount of z

したがって、Salaryリレーション(テーブル)の各タプル(行)は、上記のアサーションの構造に適合している必要があります。その違いは、関連するドメイン(列)の値の置き換えですが、(a)の間に関係が存在する必要があります。すべてのSalaryドメイン(列)および(b)各タプル(行)に関するすべての対応する値 そのような関係はそれが不可欠です。

高い正規形(2NFと3NFは)関係(テーブル)の(列)ドメイン間の関数依存性を取り除くために有用である、彼らは避けるのに役立つ望ましくない 接続ドメイン(列)の間を、などの望ましくないとの接続はの導入許可更新異常を。2NFと3NFはどちらも、特定のRDB実装における関係(テーブル)の構造の健全性をテストするのに役立ちます。


3

イラスト。一般的な米国の住所を含むテキスト文字列を取ります:

"123 Cornhusk Rd., South Succotash, NY 12345"

Cornhusk Roadのすべての居住者、South Succotashの町またはニューヨーク州の特定の居住者を検索するクエリを作成するのは、困難な作業です。特に、データに次の文字列がある場合:

"123 Cornhusk Road, South Succotash, NY 12345"
"123 Cornhusk Rd., South Succotash, New York 12345"
"123 Cornhusk, South Succotash, NY 12345"
"123 Cornhusk Rd., SOUTH SUCCOTASH, NY 12345"

これらのそれぞれは同じ実際のアドレスを指定します(これは「Succatash」のようなスペルミスの可能性も考慮していません)が、それらを正常に比較するためのアルゴリズムを書くことは、この地球での最後の残りの年を専用にしたくないものです。

最初の正規形を入力してください。それがどのように行われるかの詳細については触れません。ほとんどのデータベースで見られるような一般的な形式を検討してください:

create table Addresses(
  ...
  Street  varchar,
  City    int        references Cities( ID ),
  State   char( 2 )  references States( ID ),
  Zip     int
  ...
);

これは完全な正規化ではありません。たとえば、StreetをStreetNumとStreetNameにさらに分割することもできますが、これは単純な図では十分であり、実際には、正規化プロセスが実際に行われる限りです。Cornhusk Roadのすべての居住者を見つけるという小さな問題はまだありますが、Streetで「Cornhusk」というサブストリングを検索したところ、どこかにCornhuskという名前の町があったとしても、少なくとも混乱は生じません。

デートらによって提供された定義の問題は、データの一部を調べてそのデータの意味を考慮できないことです。私が特に彼らを責めるのではなく、それはかなり難しい場合があります。

したがって、「文字列」を取得して「アドレス」に変換する必要があります。しかし、包括的なアドレスの定義を思い付くのは、見た目ほど簡単ではありません。特に、複数の国の住所で作業する場合。

まず、コンテキストを修正します。文脈がないと何も意味がありません。ここでのコンテキストはアドレスです。そのコンテキスト内で、StreetCityなどの特定の意味を持つデータの一部を見ることができます。それぞれの意味を別々のフィールドに割り当てます。

難しいのは、データは単語のように、人によって意味が異なる場合や、人によっては意味が分からない場合があります。それはそれ自体がすべてプロジェクトであり、かなりの協力的な努力を必要とします。しかし、それは優れたデータベース設計において重要な要素です。

正規化のポイントは、異常なデータを排除するか、少なくとも最小限に抑えることです。上の表で、選択した州に存在しない町または郵便番号が入力されている可能性があるという事実を考慮してください。または、選択された町に実際には存在しない通りに入った。ああ、でも今は第2と第3の正規形になりつつあり、それは別のトピックです。


1

1NFは、特定のデータ構造や固定された一連のルールではなく、関係の数学的概念の紹介と考えてください。リレーションのような数学的構造は、さまざまな方法で表現できます。テーブルは、最も便利な方法の1つにすぎません。テーブルを使用する場合、それらが意図した関係を明確に表し、表に対する操作が表現された関係に関して論理的に健全であることを保証するための制限があります。

列と行の順序と重複が重要ではないと言う場合、これはすべての重要な情報がテーブルに値として記録され、クエリにアクセスでき、テーブルのプレゼンテーションにエンコードされないようにするためです。表での色の使用を明確に禁止している作家はほとんどいませんが、上記の制限の目的を理解すると、意味のある表示色の使用を同様に除外して、重要な色の値を明示的に記録する必要があります。日付および他の作成者も、同じ理由で非表示の行識別子を廃止します。

アトミック性の概念は、すべての重要な構造が関係として表現されることを保証することです。これにより、すべてのデータの依存関係を分析して異常を防ぐことができ、意味のあるすべての構造に関係操作に均一にアクセスできます。複合値は無効ではありませんが、アンパックするにはドメイン固有の演算子が必要であり、これにより複雑さが増し、冗長性が導入される可能性があります。もちろん、実際には、いくつかの単純な複合型と関連する演算子が便利で、クエリのコンパクトさと表現力を高めるのに役立ちますが、これは理論と矛盾しません。

複数値の依存関係のような行の依存関係は1NFに違反しませんが、列間の依存関係のように、より高い正規形の対象になります。近くの繰り返しの列は好きphone1phone2など、たとえ彼らしている貧しい人々のデザインを1NFのいずれかに違反していません。


0

定義と説明 1NFはWikipediaからは、私はかなり良いと思います。- ホアノロ

ウィキペディアの記事の1文を拡張する:

電話番号として見ると、テキストはアトミックではありません

これは、なぜ多くの混乱があるのか​​を理解する手助けになるでしょう。これが単なるテキストの集まりである場合は、アトミックです。しかし、それが電話番号として見られる場合、それはアトミックではありません。日付などはこの問題を回避しています。データの意味と関係があります。主題を分析するときは、データの意味を理解する必要があります。

それをさらに分解するポイントがあるかどうかは、第1正規形が満たされているかどうかの問題に関連しています。1NFの背後にあるポイントは、すべてのデータへのキー付きアクセスを提供することです。ただし、キー付きアクセスを介して取得するものに部分構造がある場合、部分構造へのキー付きアクセスはありません。- ウォルター・ミッティ

「1NF」はさまざまなものの集まりを意味するために使用され、その多くは同時に無意味で一般的です。参照「データベース管理システム内の正規化」への私の答えをそのリンクを含みます、。それらの1つは、「dbmsの原子性とは」に対する私の答えです。(両方ともスタックオーバーフローで。)- philipxy


質問に残されたコメントから作成されたコミュニティWiki回答

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.