Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

KU-Biztech DBアプリ練習

0
Last updated at Posted at 2026-05-17

テーブルを作る

KU-BizTech PortalからDBStudioを開きます。

スクリーンショット 2026-05-17 14.53.26.png

SQL実行ボタンを押します。
スクリーンショット 2026-05-17 14.54.40.png

赤枠の部分に下記のSQL文を貼り付けて、実行します。
スクリーンショット 2026-05-17 14.55.52.png

CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
category TEXT,
description TEXT,
price NUMERIC(10, 0) NOT NULL CHECK (price >= 0),
stock_quantity INTEGER NOT NULL DEFAULT 0 CHECK (stock_quantity >= 0),
is_published BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ,
deleted_at TIMESTAMPTZ
);

CREATE TABLE buyers (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ,
deleted_at TIMESTAMPTZ
);

CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
buyer_id BIGINT REFERENCES buyers(id) ON DELETE SET NULL,
total_amount NUMERIC(10, 0) NOT NULL DEFAULT 0 CHECK (total_amount >= 0),
order_status TEXT NOT NULL DEFAULT 'ordered',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ,
deleted_at TIMESTAMPTZ
);

CREATE TABLE order_items (
id BIGSERIAL PRIMARY KEY,
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id BIGINT REFERENCES products(id) ON DELETE SET NULL,
product_name TEXT NOT NULL,
unit_price NUMERIC(10, 0) NOT NULL CHECK (unit_price >= 0),
quantity INTEGER NOT NULL CHECK (quantity > 0),
subtotal NUMERIC(10, 0) NOT NULL CHECK (subtotal >= 0),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ,
deleted_at TIMESTAMPTZ
);

テーブル一覧を見ると、4つのテーブルが作られているはずです。

スクリーンショット 2026-05-17 14.57.13.png

簡易版商品購入サイトの例
からzipファイルをダウンロードし、解凍して、app.pyなど中身を全てコピーして

自分のPCのmyBizTechフォルダの中のapp-20●●●●●●●●●●
というフォルダの中に貼り付けましょう(上書き)

gitHubと同期する

いつものようにvscodeを開いてgithubと同期してください。

いろいろためす

テーブルの削除

新しいDBを使ったWebアプリを作る場合は
SQLの実行で下記のSQL文を実行してテーブルを削除します。

DROP TABLE IF EXISTS order_items CASCADE;
DROP TABLE IF EXISTS orders CASCADE;
DROP TABLE IF EXISTS buyers CASCADE;
DROP TABLE IF EXISTS products CASCADE;

AIを使ったKU-BizTech用プロンプト

DBを使うパターン

あなたは Flask + PostgreSQL アプリの開発アシスタントである。

やりたいこと(要件)

〇〇〇〇〇〇〇〇〇〇〇〇〇〇


【前提環境(必ず守る)】
- Python + Flask
- PostgreSQL
- DB接続は環境変数 DATABASE_URL を使う(接続情報はコードに直書きしない)
- 新たな環境変数は追加できない(このプロンプト内で明示された DATABASE_URL 以外は使用禁止)
- SQLAlchemy は使わず psycopg2 を使う
- アプリが使うDBは current_schema()(public固定などはしない)

【実行方法は必ずこの形にする】
if __name__ == "__main__":
    port = int(os.environ.get("PORT", 3000))
    app.run(host="0.0.0.0", port=port)

【DDL(テーブル設計SQL)ルール(必ず守る)】
1) 命名・基本形
   - テーブル名・カラム名は 英小文字+_
   - 主キーは原則 id BIGSERIAL PRIMARY KEY
   - 原則として created_at TIMESTAMPTZ NOT NULL DEFAULT now() を入れる(必要なら updated_at / deleted_at も)

2) 外部キー(FK)で詰まらない設計
   - FKは必ず ON DELETE 方針を明示する(省略しない)
   - 子も一緒に消えてよい → ON DELETE CASCADE
   - 参照だけ外せばよい → ON DELETE SET NULL(この場合、そのFK列はNULL許可にする)
   - 原則 ON DELETE RESTRICT は使わない(使う場合は理由を1行で書く)
   - 親テーブル(users/orgs等)をDROP/DELETEしても詰まりにくい設計にする
   - 
3) 出力順(重要)
   - CREATE TABLE は 依存順で出す(参照される側 → 参照する側)

4) SQL出力フォーマット(超重要:DBStudio貼り付け前提)
   - SQLは DBStudioにそのまま貼って実行できる形式を最優先する(見栄えより実行安全性)
   - コードブロック(```)や psql ラベル、装飾、色分けを挟まない
   - 1テーブル=1 CREATE TABLE 文として、途中で分断しない
   - 外部キーは 1行で書く(REFERENCES ... ON DELETE ... を改行で分けない)
   - コメントはOKだが、SQL本文を分断しない

5) 重要:CREATE用SQLと全削除SQLは必ず分離して出力する
   - CREATE TABLE 用SQL と DROP TABLE 用SQL を混在させない

出力は必ず以下の 2セクション構成にする:
1)セクションA:テーブル作成SQL(CREATE TABLE)
   - ここには CREATE TABLE 文のみを書く
   - DROP / DELETE / TRUNCATE / INSERT を絶対に含めない
   - このセクションだけを一括コピーすれば、テーブル作成が完了する状態にする

2)セクションB:開発・テスト用 全削除SQL(DROP TABLE … CASCADE)
   - ここには DROP TABLE IF EXISTS … CASCADE; のみを書く
   - CREATE / ALTER / INSERT を絶対に含めない
   - このセクションだけを一括コピーすれば、全リセットできる状態にする

【あなた(ChatGPT)にやってほしいこと】
1) テーブル設計とSQL
   - テーブル一覧と、各テーブルの役割(短く)を提示する
   - セクションA:テーブル作成SQL(CREATE TABLE) を提示する(ルール厳守)
   - セクションB:開発・テスト用 全削除SQL(DROP TABLE … CASCADE) を提示する(ルール厳守)

2) Flask アプリ一式の出力
以下を出す(できればzipでダウンロードできる形で):
   - app.py
   - templates/ 以下(Jinja2)
   - static/ は必要なら
   - 追加Pythonファイルが必要なら適宜作る
   - requirements.txt

psycopg2 で DATABASE_URL に接続(psycopg2.connect(os.environ["DATABASE_URL"]))
SQLは 必要最小限の SELECT/INSERT/UPDATE/DELETE で書く
必ずパラメータ化する(f-stringでSQLを組み立てない)
current_schema() 前提で動くようにする(schema名を決め打ちしない)

【追加条件】
- 主キーは基本 id(自動採番)
- 可能なら deleted_at による 論理削除も検討し、物理削除が必要な場合のみ理由を書く
- サンプルデータINSERTは不要(求められたときだけ)
- 出力の最重要条件(最終チェック)
- セクションAは「CREATE TABLEだけ」で一括コピー可能
- セクションBは「DROP TABLEだけ」で一括コピー可能
- セクションA/Bの間にSQLを混ぜない
- 途中で分断・psqlラベル挿入・装飾をしない

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?