ホームページ  >  記事  >  システムチュートリアル  >  Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

王林
王林オリジナル
2024-07-20 03:00:00351ブラウズ
3 つの主要なデータベース パラダイム

Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

正規形式 (NF): リレーショナル データベースを設計する場合、さまざまな規範要件に従って、さまざまなパラダイムが異なる仕様で提示されます。パラダイム データベースの冗長性が高くなります。小さくなるほど小さくなります。ただし、冗長性を減らすために盲目的にパラダイムを追求すると、実際にデータの読み取りと書き込みの効率が低下する場合があります。このときは、パラダイムを逆転して、時間を引き換えにスペースを使用する必要があります。データテーブルのテーブル構造が、ある設計基準のレベルに準拠しているかどうかを大まかに理解できます。

1NF つまり、テーブルの列はアトミックであり、分解できません。つまり、データベースがリレーショナル データベース (mysql/oracle/db2/informix/sysbase/sql サーバー) である限り、列情報は分解できません。自動的に 1NF を満たします。データベース テーブルの各列は分割不可能なアトミック データ項目であり、コレクション、配列、レコード、その他の非アトミック データ項目にすることはできません。エンティティ内の属性に複数の値がある場合、それを異なる属性に分割する必要があります。一般的な理解では、フィールドには 1 つの情報のみが保存されます。

仕入と販売は購入数量、購入単位、販売単位、販売数量などにさらに分割できるため、上記は最初のパラダイムに適合しません。以下は最初のパラダイムに適合します。 Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

2NF 第 2 正規形 (2NF) は、第 1 正規形 (1NF) に基づいて確立されます。つまり、第 2 正規形 (2NF) を満たすためには、まず第 1 正規形 (1NF) を満たす必要があります。 1NF を満たすと、テーブル内のすべての列が主キーに依存する必要があり、主キーと関係のない列があってはなりません。つまり、テーブルは 1 つのことしか記述しません。
例: 注文テーブルは注文関連の情報のみを記述するため、すべてのフィールドは注文 ID に関連する必要があります。製品テーブルは製品関連の情報のみを記述するため、すべてのフィールドは製品 ID に関連する必要があります。以下に示すように、1 つのテーブルと製品情報を同時に表示することはできません。

Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム3NF

まず第 2 正規形 (2NF) を満たす必要があります。これには次の条件が必要です。 テーブル内の各列は主キーに直接のみ関連し、間接的には主キーにのみ依存できます。 例: 注文テーブルには顧客関連の情報が必要になります。顧客テーブルが分離された後は、注文テーブルには 1 つのユーザー ID のみが必要になり、他の顧客情報は必要なくなります。他の顧客情報はユーザー ID に直接関連付けられており、注文 ID には直接関連付けられていないためです。

さまざまな制約Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイム

制約は、テーブル内のデータの正確性、完全性、一貫性、リンクを制限するために使用される一連のルールです。 Mysql では、制約は information_schema データベースの table_constraints に保存され、このテーブルを通じて制約情報をクエリできます。以下に示すように:

Mariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイムNULLではありません

非 null 制約、この列の値が NULL であることが許可されるかどうか、ここで非常に重要なことが 1 つあります。指定されていない場合、多くのフィールド (時間を除く) のデフォルト値は NULL になるため、NULL=NULL を除く他の値は""、0 などは NULL に等しくありません。

フィールドを NOT NULL に変更します:

リーリー

ここで別の問題が発生します。デフォルト値は NULL ですが、フィールドが挿入されるように指定されていないからです。 リーリー

ユーザー名列の値が null 文字であり、そのデフォルト値が NULL であることがわかります。

logipのデフォルト値はNULLですが、NULL値の挿入が許可されているため、ここではNULL値が表示されます。

確認してください~ NULL がデフォルト値ですが、NULL 値は許可されていないため、SQL_MODE により、ユーザー名フィールドには値が存在しないことになり、警告が表示されるだけで、エラーは直接報告されません。 SQL_MODE を「STRICT_ALL_TABLES」として指定すると、挿入時に次のエラーが報告されます:

リーリー

ユニーク
unique は一意制約を表します。一意制約は、データの一意性を保証するために、指定されたテーブルの列または列の組み合わせを繰り返すことができないことを意味します。一意制約では値の重複は許可されませんが、

は複数の null にすることができます。同じテーブルに複数の 一意制約 (複数の列を結合する制約) を含めることができます。一意制約を作成するときに、一意制約名を指定しないと、デフォルトでカラム名と同じ名前になり、MySQL はデフォルトで一意制約のカラムに一意のインデックスを作成します。

一意の制約を追加します:

リーリー

主キー
主キー制約は、

一意制約 + 非 null 制約 の組み合わせに相当します。主キー制約列では、重複または null 値が許可されません。複数の列を結合する主キー制約の場合、これらの列のいずれも null 値を持つことは許可されず、結合された値を繰り返すことは許可されません。各テーブル には最大で 1 つの主キー のみが許可されます。主キー制約はカラム レベルまたはテーブル レベルで作成できます。主キー制約を作成する場合、システムは常に PRIMARY になります。列とそれが配置されているテーブルの組み合わせに対応する一意のインデックスを作成します。

操作は次のとおりです:

リーリー

外部キー
外部キー制約

1 つまたは 2 つのテーブル間の参照整合性を確保します 。外部キーは、 1 つのテーブルの 2 つのフィールドまたは 2 つのテーブルの 2 つのフィールド間の参照関係に基づいて構築されます 。 つまり、スレーブ テーブルの外部キー値がマスター テーブル内に存在するか、空である必要があります。マスター テーブルのレコードがスレーブ テーブルによって参照される場合、マスター テーブルのレコードは削除されません。データを削除する場合は、まずスレーブ テーブルを削除する必要があります。テーブル内のデータはレコードに依存します。その後、メイン テーブルのデータを削除することもできます。別の方法は、サブテーブルのデータをカスケード削除することです。テーブル。 注: 外部キー制約の参照列は、メイン テーブルの主キーまたは一意キー制約の列のみを参照できます。参照されるメイン テーブルの列が唯一のレコードではないため、テーブルから参照されるデータは次のようになります。同じテーブルに複数の外部キー制約がある可能性があります。 それでは、ユーザーのグループ情報を記録するための GROUP テーブルを作成しましょう。
リーリー

次に、ユーザーテーブルにレコードを追加して、ユーザーがどのグループに属しているかを記録します

リーリー

//外部キーを追加します

リーリー

//外部キー制約を検証する

リーリー

//空にすることもできますが、参照テーブルにない値にすることはできません

リーリー

外部キーの定義:

リーリー

次のカスケード操作には注意が必要です:

ON DELETE CASCADE: 親 (参照) テーブルの行を削除するときに、削除された親行に依存する子テーブルが子テーブルにある場合、子行も一緒に削除されます。これはお勧めできません。

ON DELETE SET NULL: 親 (参照) テーブルの行を削除するときに、削除された親行に依存する子テーブルが子テーブルにある場合、その子行は削除されませんが、子の外部キー列は削除されます。行は NULL に設定されます



チェック
CHECK 制約は、テーブルに行を挿入するとき、またはデータの行を更新するときに CHECK 制約チェックを実行します。式が TRUE の場合、挿入は許可されます。式が FALSE の場合、挿入は拒否されます。 MariaDB10.2 バージョンでは CHECK のみのサポートが開始されました。
一般的な CHECK 制約には以下が含まれます:

リーリー

例: ユーザー名の長さが 0 より大きいかどうかを確認します

リーリー

これは非常に役に立たないようです。通常、データの判断はビジネス層で行われ、データベースはデータを保存するだけで済みます。

以上がMariadb 学習の要約 (5): データベース テーブルの制約と 3 つのパラダイムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。