MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

第一正規形(1NF)


1NFとは

1NFは、DBMSの第一正規形であり、正規化されていないテーブルに適用されて正規化されます。正規化されていないテーブルには、完全なデータベース設計を取得するために回避する必要がある次の問題があります-

正規化されていないテーブルの問題

データの冗長性

同じデータ項目を複数回保存することをデータの冗長性と呼びます。

例を見てみましょう-

<従業員> 従業員の現在の住所を格納するフィールドを持つテーブル。これらの従業員の何人かは会社が住む場所を与えました。したがって、それらは同じアドレスを持っています。アドレスはデータベースで繰り返されます-

表1.1

EmpID

EmpName
EmpAddress
001
アミット
11、VAストリート、ニューヨーク
002
トム
11、VAストリート、ニューヨーク
003
デビッド
11、VAストリート、ニューヨーク
004
スティーブ
13、HGブロック、フィラデルフィア
005
ジェフ
13、HGブロック、フィラデルフィア


これを解決するには、従業員の住所を別のテーブルに保存し、テーブルをポイントします。

更新の異常

テーブルの更新中に問題が発生した場合に発生します。

例を見てみましょう-

表1.2

EmpID

EmpName

EmpAddress

EmpDept

001
アミット
11、VAストリート、ニューヨーク
A
002
トム
11、VAストリート、ニューヨーク
B
003
トム
11、VAストリート、ニューヨーク
C
004
スティーブ
13、HGブロック、フィラデルフィア
D
005
ジェフ
27、ZRブロック、バージニア
E


2つの部門の従業員Tomのアドレスを更新する必要がある場合は、2つの行を更新する必要があります。 1つの行だけを更新すると、トムは2つの異なるアドレスを持ち、データの不整合につながります。

削除の異常

会社が部門Dを閉鎖することを決定したとすると、行を削除すると、従業員のSteveのデータも削除されます。

挿入の異常

存在しないレコードにデータを挿入しようとしたときに発生します。

正規化は、上記のすべての問題/異常を取り除き、データベース管理者が愛する正規化された完全なデータベース設計を提供します。

第一正規形(1NF)を使用してデータを正規化する方法を見てみましょう

なぜINF

第一正規形(1 INF)は、上記のセクションに示されているように、データベースのデータ冗長性の問題と異常を取り除くのに役立ちます。 1NFのすべての属性には、アトミックドメインが必要です。アトミックでない場合は、データベースの設計が不適切です。これは正規化の最初のステップです。

したがって、テーブルを正規化した形式にするための最も重要なルールは、テーブルにはアトミック値のみを含める必要があるということです。

次の例には、DeptRole列を除く、すべての列がアトミック値で構成されるテーブルがあります。したがって、DeptRole列は、部門A、B、およびCのアトミック値ルールに違反しています。

表1.3

DeptId
DeptName
DeptRole
001
A
財務、人事
002
B
プログラミング、ネットワーキング
003
C
管理、マーケティング
004
D
操作


それを修正して1NFに変換しましょう:

DeptId
部門名
DeptRole
001
A
財務
001
A
HR
002
B
プログラミング
002
B
ネットワーキング
003
C
管理
003
C
マーケティング
004
D
操作


上記の表は1NFであり、次のスクリーンショットに要約されているように、すべての列に原子値があります-

第一正規形(1NF)


  1. 第3正規形(3NF)

    3NFとは何ですか? 正規化の3番目のステップは3NFです。 リレーションが2NFにあり、推移的な関数従属性がない場合にのみ、テーブルは3NFにあります 例を見てみましょう- 例(テーブルは3NFに違反しています) Movie_ID Listing_ID Listing_Type DVD_Price ($) 0089 007 コメディ 100 0090 003 アクション 150 0091 007 コメディ 100 上記の表は、推移的な機能依存性

  2. MySQLテーブルデータはWindowsのどこに保存されていますか?

    MySQLテーブルデータの場所を知るために、以下の構文を使用できます- select @@datadir; これには、SHOWVARIABLESコマンドを使用することもできます。以下は構文です- show variables where Variable_name ='datadir'; 上記の構文を実装して、MySQLテーブルがデータを格納する場所を確認しましょう- mysql> select @@datadir; これにより、次の出力が生成されます- +---------------------------------------------+ | @@data