データベース制約の設計と実装

MySQLMySQLBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、主キー、外部キー、一意制約、既定値、チェック制約など、データベース スキーマにさまざまな制約を追加する方法を学びます。このプロジェクトが終了するとき、関係型データベースにおけるデータの整合性ルールの設計と強制方法をより深く理解するようになります。

👀 プレビュー

Database schema constraints preview

🎯 タスク

このプロジェクトで学ぶことは以下の通りです。

  • salgrade テーブルに複合主キーを作成する方法
  • emp テーブルの deptno フィールドに外部キーを指定する方法
  • emp テーブルの ename フィールドに重複がないように一意制約を使用する方法
  • emp テーブルの comm フィールドに既定値を設定する方法
  • emp テーブルの hiredate フィールドに 2022 年 2 月 28 日以降の採用日が入力されないようにチェック制約を使用する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • データベース設計におけるデータ整合性制約の重要性を理解する
  • MySQL データベースにさまざまな種類の制約を実装する
  • データの品質と一貫性を維持するためのベスト プラクティスを適用する
  • データベース制約に関連する問題のトラブルシューティングとデバッグを行う

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/DatabaseFunctionsandDataTypesGroup(["Database Functions and Data Types"]) mysql(("MySQL")) -.-> mysql/SystemManagementToolsGroup(["System Management Tools"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/alter_table("Table Modification") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/source("External Code Execution") mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/database("DB Function - Info Retrieval") mysql/SystemManagementToolsGroup -.-> mysql/show_status("Status Overview") mysql/SystemManagementToolsGroup -.-> mysql/show_variables("Configuration Overview") subgraph Lab Skills mysql/use_database -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/alter_table -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/select -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/source -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/database -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/show_status -.-> lab-316800{{"データベース制約の設計と実装"}} mysql/show_variables -.-> lab-316800{{"データベース制約の設計と実装"}} end

MySQL サーバーを起動してデータベースをインポートする

このステップでは、MySQL サービスを起動して personnel.sql データベースをインポートする方法を学びます。以下の手順に従ってこのステップを完了します。

  1. MySQL を起動する:

    sudo /etc/init.d/mysql start
  2. personnel.sql データベースを MySQL にインポートする。ターミナルで以下のコマンドを実行することで行えます:

    mysql -u root < /home/labex/project/personnel.sql

このコマンドは、root ユーザーを使用して personnel.sql データベースを MySQL にインポートします。

「salgrade」テーブルに複合主キーを追加する

このステップでは、「salgrade」テーブルに複合主キーを追加する方法を学びます。以下の手順に従ってこのステップを完了します。

  1. MySQL ターミナルにログインする:

    mysql -uroot
  2. 「personnel」データベースを使用する:

    USE `personnel`;
  3. 「salgrade」テーブルに複合主キーを追加し、「grade」、「losal」、「hisal」の各フィールドを複合主キーとする:

    ALTER TABLE salgrade
    ADD PRIMARY KEY (grade, losal, hisal);

これにより、「grade」、「losal」、「hisal」の各フィールドを使用して、「salgrade」テーブルに複合主キーが作成されます。

「emp」テーブルに制約を追加する

このステップでは、以下のことを学びます。

  • 「emp」テーブルの「deptno」フィールドに外部キーを指定し、「dept」テーブルの「deptno」フィールドを参照する方法。
  • 「emp」テーブルの「name」フィールドの重複を防止するために一意制約を使用する方法。
  • 既定値制約を使用して、「emp」テーブルの「comm」フィールドの既定値を100に設定する方法。
  • チェック制約を使用して、「emp」テーブルの「hiredate」フィールドに2022年2月28日以降の採用日が入力されないようにする方法。

以下の手順に従ってこのステップを完了します。

  1. 「personnel」データベースを使用する:
    USE `personnel`;
  2. 「emp」テーブルの「deptno」フィールドに外部キーを指定し、「dept」テーブルの「deptno」フィールドを参照する:
    ALTER TABLE emp
    ADD FOREIGN KEY (deptno) REFERENCES dept(deptno);
  3. 「emp」テーブルの「ename」フィールドの重複を防止するために一意制約を使用する:
    ALTER TABLE emp
    ADD UNIQUE (ename);
  4. 既定値制約を使用して、「emp」テーブルの「comm」フィールドの既定値を100に設定する:
    ALTER TABLE emp
    ALTER COLUMN comm SET DEFAULT 100;
  5. チェック制約を使用して、「emp」テーブルの「hiredate」フィールドに2022年2月28日以降の採用日が入力されないようにする:
    ALTER TABLE emp
    ADD CHECK (hiredate <= '2022-02-28');

テーブル構造を表示する

このステップでは、コマンドを使用して salgradeemp のテーブル構造を表示します。

  1. salgrade テーブルの構造を表示する:

    desc salgrade;
  2. emp テーブルの構造を表示する:

    desc emp;

以下の出力が表示されるはずです。

MariaDB [personnel]> desc salgrade;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| grade | int(4)      | NO   | PRI | NULL    |       |
| losal | double(7,2) | NO   | PRI | NULL    |       |
| hisal | double(7,2) | NO   | PRI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.001 sec)

MariaDB [personnel]> desc emp;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| empno    | int(4)      | NO   | PRI | NULL    |       |
| ename    | varchar(20) | YES  | UNI | NULL    |       |
| job      | varchar(20) | YES  |     | NULL    |       |
| mgr      | varchar(20) | YES  |     | NULL    |       |
| hiredate | date        | YES  |     | NULL    |       |
| sal      | double(7,2) | YES  |     | NULL    |       |
| comm     | double(7,2) | YES  |     | 100.00  |       |
| deptno   | int(4)      | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.001 sec)

おめでとうございます!このプロジェクトを正常に完了しました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。LabExでさらに多くの実験を行って、スキルを向上させることができます。