Claude 是一個很強的 AI 工具,大概是我用過唯一可以和 Gemini 挑戰的 AI 工具。
它對於程式設計的能力相當強大。我這個測試證明了,不止程式設計能力很強,連資料庫的整個架構能力也是很嚇人的。
之前,我不是在 Proxmox VE 上建了一個 Zorin OS 的 VM,並且在其上建了一個 PostgreSQL 的Docker Container 嗎?那個 Docker Container 蠻好用的,因為它成功了,所以我有更大的想法想試試看。上次我試了讓 Claude 產生一個用 C++ 23 呼叫 SQLite 的範例,成功,只是按照它產生的 C++ 程式碼,其實只用到 C++23的部份新功能,沒有全部。但是我已經非常滿意了。
這次,我來一個很大很大的挑戰,大到我都不相信我目前的免費版本的 Claude,它會幫我生成嗎?
我向 Claude 提出以下的問題:
我現在想再試另外一種範例。
我想試試你能不能做以下的事。
我在我的 Zorin OS 的 VM 下,會建立一個 PostgreSQL 的 Docker Container。
我建好它了,我稱呼它為 postgres,所以每當我想使用它時,我都會執行:
docker start postgres
接著,如果我想下命令時,只需:
docker exec -it postgres psql -U postgres
就可以用 postgres 帳號,在 psql 的 interactive 模式下,下 SQL 指令。
那麼,我想讓你幫我生一個測試資料庫,它的目的是模擬一家商店的銷貨、庫存、客戶管理系統。它要有這三部份,1. 我希望商品範例能有二十種,隨便產生。2.客戶要有十個範例,一樣,任意產生。3.要有庫存管理的表格。4.要有關性,所以資料表們要正規化。
你能幫我產生這樣的範例資料庫嗎?
回答是:
好的!我來幫你設計一個正規化的商店管理資料庫,包含銷貨、庫存、客戶三大模組。下載這個 .sql 檔後,在你的 VM 裡執行以下步驟即可匯入:
# 把 sql 檔複製進容器
docker cp store_db.sql postgres:/tmp/store_db.sql
# 執行匯入
docker exec -it postgres psql -U postgres -f /tmp/store_db.sql
資料庫結構總覽
資料表共 9 張,依正規化原則設計:
| 資料表 | 說明 |
|---|---|
categories |
商品類別(5 種) |
suppliers |
供應商(5 家) |
products |
商品(20 種) |
inventory |
庫存數量(每商品一筆,含安全水位) |
inventory_transactions |
庫存異動明細(進、出、盤點) |
customers |
客戶(10 人) |
orders |
銷貨訂單(10 筆,含各種狀態) |
order_items |
訂單明細(售價快照,附 generated subtotal) |
purchase_orders + purchase_order_items |
採購補貨單 |
關聯圖(簡要)
categories ──< products >── suppliers
│
inventory
inventory_transactions
│
order_items >── orders >── customers
purchase_order_items >── purchase_orders >── suppliers
匯入後,SQL 檔末尾有三段驗證查詢,會自動印出商品列表、訂單摘要、以及庫存低於安全水位的商品,方便你確認資料正確。
以下是程式碼:
好,我們來看看能不能在我的 Zorin OS 執行?
居然成功了。下圖是 E-R Diagram (點它會出現大圖,小圖看不清楚):
而且,我並沒有要求範例要用中文的,它卻產生中文資料。讓我太驚訝了。
而且架構完整,甚至有幾個亮點:
價格快照 (Price Snapshot):在 order_items 表中,保留了 unit_price 欄位。這是一個非常專業的做法,能確保即便未來商品調價,過去的訂單金額仍能正確回溯。
嚴謹的約束:使用了 CHECK (quantity > 0) 和 GENERATED ALWAYS AS (虛擬欄位),能大幅減少程式碼邏輯出錯導致的資料髒亂。
效能優化:腳本末尾定義了多組 INDEX,針對外鍵欄位建立索引,能顯著提升資料表 Join 時的讀取速度。
由於它成功了,我會在這個基礎下,繼續擴大新的應用範圍,請拭目以待。

沒有留言:
張貼留言