つくる ER図v1

ER図の第1版

新しいことは出てきません。ここまでに決めた線をすべて引いて、多店舗ECの ER図を1枚にまとめます。

erDiagram stores ||--o{ orders : places customers ||--o{ orders : makes stores ||--o{ inventories : has products ||--o{ inventories : stocked_as orders ||--|{ order_items : contains products ||--o{ order_items : appears_in orders ||--o| shipments : shipped_by

7本の線があります。それぞれの記号を両方向から読んで、意味を確かめてください。

線の数を数える

この図から、外部キーが何本になるかは数えられます。

テーブル外部キー
ordersstore_id、customer_id の2本
inventoriesstore_id、product_id の2本
order_itemsorder_id、product_id の2本
shipmentsorder_id の1本

合計7本です。図の線の数と外部キーの本数は必ず一致します。 一致しなければ、図か DDL のどちらかが間違っています。この数え合わせは、設計をレビューするときの一番簡単な検算になります。

図に無い線は引かない

実装していると「ここも繋げておくと便利そう」と思う場面が出てきます。たとえば order_itemsstore_id を足せば、店舗別の売上が JOIN 1回で出せます。

しかしその店舗は orders.store_id を辿れば分かります。同じ事実が2か所に書かれるので、片方だけ書き換わる余地が生まれます。第1章の sales_flat と同じ構造です。

便利さのために線を足すのは、正規化を崩す判断です。やるなら意識してやることで、それは第3章の最後で扱います。いまは図のとおりに作ります。

第2章の成果物

これで、要件文から ER図、ER図から DDL まで一本の線で繋がりました。ただし、いまのテーブルにはまだ大きな穴があります。sales_flat のような冗長さが、形を変えて残っているかもしれません。それを見つけて直すのが第3章です。

手を動かす

残り3テーブルを作り、外部キーが7本揃っていることを数えて確かめます。

テーブル構造

CREATE TABLE stores ( id integer PRIMARY KEY, name text NOT NULL, pref text NOT NULL, opened_on date ); CREATE TABLE products ( id integer PRIMARY KEY, name text NOT NULL, price integer NOT NULL, category text NOT NULL, is_active boolean NOT NULL ); CREATE TABLE customers ( id integer PRIMARY KEY, name text NOT NULL, email text NOT NULL, joined_on date NOT NULL ); CREATE TABLE orders ( id integer PRIMARY KEY, store_id integer NOT NULL, customer_id integer NOT NULL, ordered_on date NOT NULL, CONSTRAINT orders_store_fk FOREIGN KEY (store_id) REFERENCES stores (id), CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES customers (id) );

期待される出力

table_namefk_count
inventories2
order_items2
orders2
shipments1

ヒント

query.sql
学習モード
コードの実行結果
データベースを初期化中...