生成AIで架空のポケモンを作るためのデータベースを作る過程で必要になったSQLについて学んでいます。今回はCREATE文の問題演習から。ChatGPTに作らせた問題を解いています。
問題 2: テーブルの作成と外部キー制約
以下の要件を満たすSQLのCREATE文を作成してください。
- テーブル名は
orders
。 order_id
カラムは整数型で、プライマリキーであり、自動インクリメントされる。order_date
カラムは日付型で、NULL値を許可しない。customer_id
カラムは整数型で、customers
テーブルのid
カラムを参照する外部キー制約を持つ。
回答:
CREATE TABLE orders(
order_id INTEGER autoincrement,
prymary key(order_id),
order_date ,#日付型を指定する方法がわからない
customer_id integer
foreign key(customer_id) references customers(id),
);
ChatGPTによる採点:
問題2の正しい答えを以下に示します。日付型の指定方法を含めて修正しました。
問題2の答え
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY AUTOINCREMENT,
order_date DATE NOT NULL,
customer_id INTEGER,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
解説
- テーブルの作成:
CREATE TABLE orders
は、新しいテーブルorders
を作成します。
- カラムの定義:
order_id INTEGER PRIMARY KEY AUTOINCREMENT
:order_id
カラムは整数型で、プライマリキーです。また、自動インクリメントされます。order_date DATE NOT NULL
:order_date
カラムは日付型で、NULL値を許可しません。customer_id INTEGER
:customer_id
カラムは整数型です。
- 外部キー制約の設定:
FOREIGN KEY (customer_id) REFERENCES customers(id)
:customer_id
カラムがcustomers
テーブルのid
カラムを参照する外部キーであることを指定します。
修正点の詳細
order_id
カラムの修正:autoincrement
はPRIMARY KEY
の部分に移動しました。AUTOINCREMENT
は自動インクリメントを指定します。
- 日付型の指定:
order_date
カラムにDATE
データ型を指定しました。
- 外部キー制約の位置:
FOREIGN KEY (customer_id) REFERENCES customers(id)
の位置を修正しました。
これで、orders
テーブルが正しく作成され、日付型の指定と外部キー制約が適切に設定されます。
見た感じ、DATE型とNOT NULL指定以外は合ってそうだ。こんな感じで自分の解答とChatGPTの解答を見比べて問題演習していこう。問題は全5問あって、問題3~5は以下。
問題 3: デフォルト値の設定
以下の要件を満たすSQLのCREATE文を作成してください。
テーブル名はproducts。
product_idカラムは整数型で、プライマリキーであり、自動インクリメントされる。
product_nameカラムは文字列型で、NULL値を許可しない。
priceカラムは実数型で、デフォルト値は0.0。
created_atカラムはタイムスタンプ型で、デフォルト値は現在のタイムスタンプ。
問題3はデフォルト値の指定をDEFAULT (デフォルト値)で指定する文法、問題4はUNIQUE文、問題5は複数プライマリーキーの設定。初見知識はわからないが、初見部分以外は正しくかけていた。まぁ初手の初手から躓いているようでは困るか。
次回に続く