プライマリーキーが設定されていないテーブルに関するこの警告は何ですか?

対応OS: Windows, Mac, Linux

Navicat対応製品: すべて

Navicat対応バージョン: Windows バージョン10.x以下, Mac バージョン8.x以上, Linux バージョン10.x以下

 

まず、この警告が表示されないようにできます!

Windows版とLinux版: ツール > オプションを選択し、表示 > データ&グリッドで、プライマリーキー警告メッセージを表示のチェックをはずします。

Mac版: Navicat xxx > 環境設定を選択し、グリッドタブで、プライマリーキー警告メッセージを表示のチェックをはずします。

Navicatがこの警告を出す理由は、プライマリーキーを持たないテーブルを更新する時に予期しない結果と取得する可能性があるためです。以下のサンプルを見てみましょう。

以下のテーブルを例にあげます:

Name

Surname

Age

Pete

McKensey

24

John

Slaid

34

Pete

McKensey

44

Mary

Joplen

26

このテーブルはプライマリーキーを持ちません。Peteのageを44に更新する場合、以下のステートメントがサーバーに送られます:

UPDATE "table" SET age=44 WHERE name='Pete' and surname='McKensey' and age=24;

これは正しく実行され、最初のレコードのageの値を変更します。ここで、テーブルにはPete McKensey age 44のレコードが2つできます。今、3番目のレコードのageを55に更新しようとすると、以下のステートメントがサーバーに送られます:

UPDATE "table" SET age=55 WHERE name='Pete' and surname='McKensey' and age=44;

このステートメントは、1番目と3番目のレコードのageの値を55に変更します。

このテーブルのデータは、現在、1番目と3番目のレコードが全く同じ値を持つという一貫性のない状態であり、この2つを区別する方法は全くないことに気が付くはずです。このようなことが発生するのは、テーブルが第一正規形ではない、つまり、テーブルのレコードを一意に識別するために使用できるフィールドやフィールドグループがテーブルに存在しないためです。

これが、Navicatの古いバージョンがテーブル更新に対してプライマリーキーを必要としていた理由です。このテーブルがプライマリーキーに設定されたIDフィールドを持つ場合、ステートメントは以下のようになります:

UPDATE "table" SET age=44 WHERE ID=1;
UPDATE "table" SET age=55 WHERE ID=3;

これらのステートメントは、データの矛盾を引き起こしません。

本件について多くのお問い合わせをいただきましたので、現在、Navicatは警告を表示するだけで、プライマリーキーを持たないテーブルでも更新できるように変更されています。

さらに質問がございましたら、 チケット送信.
他にご質問がございましたら、リクエストを送信してください

0 コメント

記事コメントは受け付けていません。