第一正規形(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であり、次のスクリーンショットに要約されているように、すべての列に原子値があります-
-
第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 上記の表は、推移的な機能依存性
-
MySQLテーブルデータはWindowsのどこに保存されていますか?
MySQLテーブルデータの場所を知るために、以下の構文を使用できます- select @@datadir; これには、SHOWVARIABLESコマンドを使用することもできます。以下は構文です- show variables where Variable_name ='datadir'; 上記の構文を実装して、MySQLテーブルがデータを格納する場所を確認しましょう- mysql> select @@datadir; これにより、次の出力が生成されます- +---------------------------------------------+ | @@data