はじめに
共同開発をしていて、自分のメモ用程度に作成します。
ケーキ販売ショップを作成するためのER図を作成します。
エンティティとリレーションシップとは?
オンラインショッピングのサイトでは、「顧客」と「注文」がエンティティとなり、それらの間には「作成する」というリレーションシップがあります。これはエンティティ同士がどう関わっているか、つまり「つながり」を表します。
つまり、「顧客は注文を作成する」というつながりがある、というわけです。
エンティティとリレーションシップの定義(ER図作成)
注文ステータス 注文の状態遷移を表す(後述)。
製作ステータス 注文に紐付く注文商品の状態遷移を表す(後述)。
販売ステータス 商品の販売状況を表す。現状、販売中、売切れの2パターンがある。
販売停止商品は「売切れ」をセットする。
会員ステータス 現状、有効・退会の2パターンがある。
ジャンル 商品の種類。
現状、ケーキ、プリン、焼き菓子、キャンディの4ジャンルある。
ユーザーとカート(1対多):
もしショッピングカートがユーザーごとに1つだけ存在する場合、それは1対1のリレーションシップになります。
ただし、一部のシステムでは、ユーザーが複数のカートを持つことが許可されています。例えば、ユーザーが異なる種類の商品を別々に購入したい場合などです。このようなシステムでは、1対多のリレーションシップが適用されます。
ユーザーと注文(1対多):
各ユーザーは複数の注文を行うことができます。そのため、一つのユーザーIDは複数の注文に紐づけられます。これはユーザーが時間を経て複数の注文を行うことができるという意味です。
ユーザーと配送先(1対多):
ユーザーは複数の配送先を登録することが可能です。これは、一つのユーザーIDが複数の配送先に紐づけられるという意味です。
カートとカート内商品(1対多):
カートは複数の商品(カート内商品)を含むことができます。したがって、一つのカートIDは複数のカート内商品に関連付けられます。
商品とカート内商品(1対多):
同一の商品は複数のカートに追加されることがあります(異なるユーザーのカートや同一ユーザーの異なるカートに追加)。したがって、一つの商品IDは複数のカート内商品に関連付けられます。
注文と注文内商品(1対多):
一つの注文は複数の商品(注文内商品)を含むことができます。したがって、一つの注文IDは複数の注文内商品に関連付けられます。
商品と注文内商品(1対多):
同一の商品は複数の注文で購入されることがあります(異なるユーザーによる注文や同一ユーザーによる異なる注文)。したがって、一つの商品IDは複数の注文内商品に関連付けられます。
管理者フラグとは?
「管理者フラグ」は、ユーザーアカウントが管理者権限を持っているかどうかを示すためのフィールドです。このフラグは、通常、データベース内のユーザーテーブルに存在します。
管理者フラグがセット(通常は「1」または「true」)されているユーザーは、通常のユーザーよりも高度な機能へのアクセス権を持っています。この機能には、他のユーザーのデータの閲覧や編集、システム設定の変更、新規商品の追加や既存商品の編集等が含まれます。
管理者フラグが未セット(通常は「0」または「false」)のユーザーは、一般的なユーザーとなり、システムの基本的な機能(商品の閲覧、カートへの追加、購入など)のみを使用できます。
管理者フラグがセットされているユーザーは具体的には以下のような事が可能
ユーザーテーブル (Users): 管理者は全てのユーザー情報を閲覧・編集することができます。また、必要に応じてユーザーの退会処理も行うことができます。
住所テーブル (Addresses): 管理者はユーザーが登録した住所情報の閲覧が可能です。ただし、通常はプライバシーの観点から編集や削除は行わないことが一般的です。
商品テーブル (Products): 管理者は新規商品の追加や既存商品の編集、販売停止(売切表示)を行うことができます。
カートテーブル (Carts): 管理者は全てのユーザーのカート情報を閲覧することができます。しかし、通常はユーザーの購入意思を尊重するため、カートの編集や削除は行いません。
注文テーブル (Orders) および 注文詳細テーブル (OrderDetails): 管理者は全ての注文情報と注文詳細情報を閲覧することができます。また、注文ステータスや製作ステータスの更新も行うことができます。
疑問
一般ユーザーのテーブルの他に管理者用のテーブルは追加しなくていいんですか?
通常、システムによりますが、管理者用の専用テーブルを作成する必要は特にありません。なぜなら、管理者も基本的にはユーザーの一種であり、ユーザーテーブルの一部として管理できるからです。
管理者と一般ユーザーを区別するために、ユーザーテーブル内に「管理者フラグ」や「ユーザーロール」のようなカラムを設けることが一般的です。このフラグやロールによって、ユーザーが管理者であるかどうかを識別し、それに応じた機能やページへのアクセスを制御します。
ただし、管理者が持つ情報や機能が一般ユーザーと大きく異なり、それが複雑さを増す場合は、管理者用のテーブルを別途作成することもあります。
参考