SQLite - 制約: データ整合性のガイド
こんにちは、未来のデータベースの魔法使いたち!今日は、SQLiteの制約の世界に楽しい旅をすることになります。プログラミングが初めてであっても心配しないでください。私はあなたの親切なガイドとして、すべてをステップバイステップで説明します。このチュートリアルの終わりまでに、あなたはプロのようにデータを制約するスキルを身につけるでしょう!
制約とは?
まず、制約とは何かについて話しましょう。カードの家を建てていると想象してみてください。それを安定させるければいいですよね?データベースの制約は、カードの家が倒れないように守る規則のようなものです。これにより、データが一貫性と信頼性を保つことができます。
制約の種類
SQLiteはいくつかの制約を提供しています。それぞれを楽しい例で見ていきましょう!
1. NOT NULL 制約
NOT NULL 制約は、クラブのボーイのように振る舞います。データベースに空の値を入れることを許可しません。
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
この例では、学生用のテーブルを作成しています。name
とage
のフィールドは空にすることができません。名前や年齢なしで学生を追加しようとすると、SQLiteは丁寧ながらも固く拒否します。
2. DEFAULT 制約
DEFAULT 制約は、母親があなたの昼食を用意するようなものです。何かを持参忘れた場合、デフォルトのオプションでカバーしてくれます。
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
product TEXT NOT NULL,
quantity INTEGER DEFAULT 1,
order_date TEXT DEFAULT CURRENT_DATE
);
ここでは、注文の数量を指定しない場合、1アイテムとして默认されます。また、日付を追加忘れた場合、当日の日付を使用します。
3. UNIQUE 制約
UNIQUE 制約は、教室での席の割り当てのようなものです。2人の学生が同じ席を持つことはできません。
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
email TEXT UNIQUE
);
これにより、2人のユーザーが同じユーザー名やメールアドレスを持つことができなくなります。重複アカウントを防ぐのに最適です!
4. PRIMARY KEY 制約
PRIMARY KEY 制約は、各学生にユニークなIDカードを渡すようなものです。UNIQUE 制約の特別な種類で、NULLにすることもできません。
CREATE TABLE books (
isbn TEXT PRIMARY KEY,
title TEXT NOT NULL,
author TEXT NOT NULL
);
この例では、各本にはユニークなISBNが割り当てられ、それが識別子として機能します。
5. CHECK 制約
CHECK 制約は、先生が宿題をチェックするようなものです。データが特定の条件を満たすか確認します。
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER CHECK(age >= 18),
salary REAL CHECK(salary > 0)
);
これにより、すべての従業員が18歳以上で、給料が正の値であることが確保されます。児童労働や無給のインターンシップはありません!
6. FOREIGN KEY 制約
FOREIGN KEY 制約は、パズルのピースを繋げるようなものです。関連データに基づいてテーブルを結びつけます。
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER,
product TEXT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
この制約により、orders
テーブルのすべてのcustomer_id
がcustomers
テーブルのid
と一致する確保されます。
制約の修正
時々、制約を変更する必要があるかもしれません。それにはどのようにするかを見てみましょう。
制約の追加
既存のテーブルに制約を追加するには、ALTER TABLEコマンドを使用します:
ALTER TABLE students ADD CONSTRAINT age_check CHECK(age > 0);
これは、すべての年齢が正の数であることを確認するチェックを追加します。
制約の削除
SQLiteでは、制約を削除するのは少し難しいです。制約のない新しいテーブルを作成し、古いテーブルを削除する必要があります:
-- ステップ1: 制約のない新しいテーブルを作成
CREATE TABLE new_students AS SELECT * FROM students;
-- ステップ2: 古いテーブルを削除
DROP TABLE students;
-- ステップ3: 新しいテーブルをリネーム
ALTER TABLE new_students RENAME TO students;
制約メソッド
以下は、制約で使用できるメソッドの摘要表です:
メソッド | 説明 |
---|---|
NOT NULL | 列がNULL値を持つことを許可しない |
DEFAULT | 列にデフォルト値を提供 |
UNIQUE | 列のすべての値が異なることを確保 |
PRIMARY KEY | データベーステーブルの各行/レコードを一意に識別 |
CHECK | 列のすべての値が特定の条件を満たすことを確保 |
FOREIGN KEY | 他のテーブルの行/レコードを一意に識別 |
結論
おめでとうございます!SQLiteの制約に関するクイックコースを完了しました。制約はあなたの友達です。データをクリーンで一貫性があり、信頼性を保つのに役立ちます。データベースの世界への旅を続ける中で、これらの制約がデータ整合性を保つのに非常に価値のあるものになることを発見するでしょう。
データがどのような規則に従うべきかを常に考え、制約を使用してそれを実行してください。データベースに悪いデータが入るのを防ぐよりも、後でクリーンアップする方がはるかに簡単です!
練習を続け、好奇心を持ち、ハッピーコーディングを!??
Credits: Image by storyset