generated from MAIHAMADB.PUBLIC
No. | Alias | Name | Type | ForeignTable | ReferrerTable | TableComment | EntityName |
---|---|---|---|---|---|---|---|
1 | 会員 | MEMBER | TABLE | MEMBER_STATUS, MEMBER_ADDRESS(AsValid), MEMBER_LOGIN(AsLatest) | MEMBER_ADDRESS, MEMBER_FOLLOWING, MEMBER_FOLLOWING, MEMBER_LOGIN, MEMBER_SECURITY, MEMBER_SERVICE, MEMBER_WITHDRAWAL, PURCHASE | 会員のプロフィールやアカウントなどの基本情報を保持する。 基本的に物理削除はなく、退会したらステータスが退会会員になる。 ライフサイクルやカテゴリの違う会員情報は、one-to-oneなどの関連テーブルにて。 |
Member |
2 | 会員住所情報 | MEMBER_ADDRESS | TABLE | MEMBER, REGION | 会員の住所に関する情報で、同時に有効期間ごとに履歴管理されている。 会員を基点に考えた場合、構造的には one-to-many だが、業務的な定型条件で one-to-one になる。このような構造を「業務的one-to-one」と呼ぶ! 有効期間は隙間なく埋められるが、ここでは住所情報のない会員も存在し、厳密には(業務的な) "1 : 0..1" である。 |
MemberAddress | |
3 | 会員フォローイング | MEMBER_FOLLOWING | TABLE | MEMBER, MEMBER | とある会員が他の会員をフォローできる。すると、フォローした会員の購入履歴が閲覧できる。 | MemberFollowing | |
4 | 会員ログイン | MEMBER_LOGIN | TABLE | MEMBER, MEMBER_STATUS | ログインするたびに登録されるログイン履歴。 登録されたら更新されるも削除されることもない。さらには、登録する人もプログラムもはっきりしているので、(紙面の都合上もあって)ここでは共通カラムは省略している。 |
MemberLogin | |
5 | 会員セキュリティ情報 | MEMBER_SECURITY | TABLE | MEMBER | 会員とは one-to-one で、会員一人につき必ず一つのセキュリティ情報がある | MemberSecurity | |
6 | 会員サービス | MEMBER_SERVICE | TABLE | MEMBER, SERVICE_RANK | 会員のサービス情報(ポイントサービスなど)。 テストケースのために、あえて統一性を崩してユニーク制約経由の one-to-one を表現している。 |
MemberService | |
7 | 会員ステータス | MEMBER_STATUS | TABLE | MEMBER, MEMBER_LOGIN | 会員のステータスを示す固定的なマスタテーブル。いわゆるテーブル区分値! 業務運用上で増えることはなく、増減するときはプログラム修正ともなうレベルの業務変更と考えられる。 こういった固定的なマスタテーブルには、更新日時などの共通カラムは定義していないが、業務上そういった情報を管理する必要性が低いという理由に加え、ExampleDBとして共通カラムでER図が埋め尽くされてしまい見づらくなるというところで割り切っている。実業務では統一的に定義することもある。 |
MemberStatus | |
8 | 会員退会情報 | MEMBER_WITHDRAWAL | TABLE | MEMBER, WITHDRAWAL_REASON | 退会会員の退会に関する詳細な情報。 退会会員のみデータが存在し、"1 : 0..1" のパターンの one-to-one である。 共通カラムがあってバージョンNOがないパターン。 基本的に更新は入らないが、重要なデータなので万が一のために更新系の共通カラムも。 |
MemberWithdrawal | |
9 | 商品 | PRODUCT | TABLE | PRODUCT_CATEGORY, PRODUCT_STATUS | PURCHASE | Product | |
10 | 商品カテゴリ | PRODUCT_CATEGORY | TABLE | PRODUCT_CATEGORY | PRODUCT, PRODUCT_CATEGORY | 商品のカテゴリを表現するマスタ。自己参照FKの階層になっている。 | ProductCategory |
11 | 商品ステータス | PRODUCT_STATUS | TABLE | PRODUCT | 商品のステータスを表現する固定的なマスタ。 | ProductStatus | |
12 | 購入 | PURCHASE | TABLE | MEMBER, PRODUCT | PURCHASE_PAYMENT | 一つの商品に対する購入を表現する(購入履歴とも言える)。 実業務であれば購入詳細というテーブルを作り、「購入という行為」と「その中身(詳細)」を違う粒度のデータとしてそれぞれ管理するのが一般的と言えるでしょう。というか、注文とか請求とかそういうことを考え始めたらもっと複雑になるはずですが、ExampleDBということで割り切っています。 |
Purchase |
13 | 購入支払 | PURCHASE_PAYMENT | TABLE | PURCHASE | 購入に対する支払。 分割払いもできるのでmanyとなり、会員からの孫テーブルのテストができてうれしい。 |
PurchasePayment | |
14 | 地域 | REGION | TABLE | MEMBER_ADDRESS | 主に会員の住所に対応する漠然とした地域。 かなりざっくりした感じではある。唯一の業務的one-to-oneの親テーブルのケース。 |
Region | |
15 | サービスランク | SERVICE_RANK | TABLE | MEMBER_SERVICE | 会員のサービスレベルを表現するランク。(ゴールドとかプラチナとか) | ServiceRank | |
16 | 退会理由 | WITHDRAWAL_REASON | TABLE | MEMBER_WITHDRAWAL | 会員に選ばせる定型的な退会理由のマスタ。そういえば、これ表示順カラムがないですねぇ... | WithdrawalReason |
会員のプロフィールやアカウントなどの基本情報を保持する。
基本的に物理削除はなく、退会したらステータスが退会会員になる。
ライフサイクルやカテゴリの違う会員情報は、one-to-oneなどの関連テーブルにて。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER_ADDRESS(AsValid), MEMBER_LOGIN(AsLatest) |
MEMBER_ADDRESS, MEMBER_FOLLOWING, MEMBER_FOLLOWING, MEMBER_LOGIN, MEMBER_SECURITY, MEMBER_SERVICE, MEMBER_WITHDRAWAL, PURCHASE |
連番として自動採番される。会員IDだけに限らず採番方法はDBMS次第。 | memberId | Integer | |||
2 | o | * | 会員名称 | MEMBER_NAME | VARCHAR | 100 | 会員のフルネームの名称。 苗字と名前を分けて管理することが多いが、ここでは単純にひとまとめ。 |
memberName | String | ||||||
3 | o | * | 会員アカウント | MEMBER_ACCOUNT | VARCHAR | 50 | ログインIDとして利用する。 昨今メールアドレスをログインIDとすることが多いので、あまり見かけないかも!? |
memberAccount | String | ||||||
4 | o | * | 会員ステータスコード | MEMBER_STATUS_CODE | CHAR | 3 | MEMBER_STATUS | MemberStatus | 会員ステータスを参照するコード。 ステータスが変わるたびに、このカラムが更新される。 |
memberStatusCode | String | ||||
5 | o | 正式会員日時 | FORMALIZED_DATETIME | TIMESTAMP | 23, 10 | 会員が正式に確定した(正式会員になった)日時。 一度確定したらもう二度と更新されないはずだ! |
formalizedDatetime | LocalDateTime | |||||||
6 | 生年月日 | BIRTHDATE | DATE | 8 | 必須項目ではないので、このデータがない会員もいる。 | birthdate | LocalDate | ||||||||
7 | * | 登録日時 | REGISTER_DATETIME | TIMESTAMP | 23, 10 | レコードが登録された日時。 会員が登録された日時とほぼ等しいが、そういった業務的な役割を兼務させるのはあまり推奨されない。といいつつ、このテーブルには会員登録日時がない... 仕様はどのテーブルでも同じなので、共通カラムの説明はこのテーブルでしか書かない。 |
registerDatetime | LocalDateTime | |||||||
8 | * | 登録ユーザ | REGISTER_USER | VARCHAR | 200 | レコードを登録したユーザ。 会員テーブルであれば当然、会員自身であるはずだが、他のテーブルの場合では管理画面から運用者による登録など考えられるので、しっかり保持しておく。 |
registerUser | String | |||||||
9 | * | 更新日時 | UPDATE_DATETIME | TIMESTAMP | 23, 10 | レコードが(最後に)更新された日時。 業務的な利用はあまり推奨されないと別項目で説明したが、このカラムはソートの要素としてよく利用される。 |
updateDatetime | LocalDateTime | |||||||
10 | * | 更新ユーザ | UPDATE_USER | VARCHAR | 200 | レコードを更新したユーザ。 システムは誰が何をしたのかちゃんと覚えているのさ。 |
updateUser | String | |||||||
11 | * | バージョンNO | VERSION_NO | BIGINT | 19 | データのバージョンを示すナンバー。 更新回数と等しく、主に排他制御のために利用される。 |
versionNo | Long |
会員の住所に関する情報で、同時に有効期間ごとに履歴管理されている。
会員を基点に考えた場合、構造的には one-to-many だが、業務的な定型条件で one-to-one になる。このような構造を「業務的one-to-one」と呼ぶ!
有効期間は隙間なく埋められるが、ここでは住所情報のない会員も存在し、厳密には(業務的な) "1 : 0..1" である。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 会員住所ID | MEMBER_ADDRESS_ID | INTEGER | 10 | 会員住所を識別するID。 期間ごとに同じ会員のデータを保持することがあるため、これは単なるPKであってFKではない。 |
memberAddressId | Integer | |||||
2 | o+ | o | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER | 会員を参照するID。 期間ごとのデータがあるので、これだけではユニークにはならない。有効開始日と合わせて複合ユニーク制約となるが、厳密には完全な制約にはなっていない。有効期間の概念はRDBでは表現しきれないのである。 |
memberId | Integer | ||||
3 | +o | * | 有効開始日 | VALID_BEGIN_DATE | DATE | 8 | 一つの有効期間の開始を示す日付。 前の有効終了日の次の日の値が格納される。 |
validBeginDate | LocalDate | ||||||
4 | * | 有効終了日 | VALID_END_DATE | DATE | 8 | 有効期間の終了日。 期間の最後の日が格納される。基本的に、次の有効開始日の一日前の値となるが、次の有効期間がない場合は 9999/12/31 となる。 |
validEndDate | LocalDate | |||||||
5 | * | 住所 | ADDRESS | VARCHAR | 200 | まるごと住所 | address | String | |||||||
6 | o | * | 地域ID | REGION_ID | INTEGER | 10 | REGION | Region | 地域を参照するID。かなり漠然とした地域。 | regionId | Integer | ||||
7 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
8 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
9 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
10 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String | |||||||||
11 | * | VERSION_NO | BIGINT | 19 | versionNo | Long |
とある会員が他の会員をフォローできる。すると、フォローした会員の購入履歴が閲覧できる。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 会員フォローイングID | MEMBER_FOLLOWING_ID | BIGINT | 19 | 連番 | memberFollowingId | Long | |||||
2 | o+ | o+ | * | わたし | MY_MEMBER_ID | INTEGER | 10 | MEMBER | 気になった人がいて...勇気を振り絞った会員のID。 | myMemberId | Integer | ||||
3 | +o | o+ | * | あなた | YOUR_MEMBER_ID | INTEGER | 10 | MEMBER | いきなりのアクションに...ちょっと心揺らいだ会員のID。 | yourMemberId | Integer | ||||
4 | o | * | その瞬間 | FOLLOW_DATETIME | TIMESTAMP | 23, 10 | ふりかえるとちょっと恥ずかしい気持ちになる日時 | followDatetime | LocalDateTime |
ログインするたびに登録されるログイン履歴。
登録されたら更新されるも削除されることもない。さらには、登録する人もプログラムもはっきりしているので、(紙面の都合上もあって)ここでは共通カラムは省略している。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 会員ログインID | MEMBER_LOGIN_ID | BIGINT | 19 | memberLoginId | Long | ||||||
2 | o+ | o | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER | memberId | Integer | |||||
3 | +o | o | * | ログイン日時 | LOGIN_DATETIME | TIMESTAMP | 23, 10 | ログインした瞬間の日時。 同じ会員が同じ日時にログインはできない。(ユニーク制約で重複ログインできないようにしてある) |
loginDatetime | LocalDateTime | |||||
4 | * | モバイルログインフラグ | MOBILE_LOGIN_FLG | INTEGER | 10 | Flg | モバイル機器からのログインか否か。 | mobileLoginFlg | Integer | ||||||
5 | o | * | ログイン時会員ステータスコード | LOGIN_MEMBER_STATUS_CODE | CHAR | 3 | MEMBER_STATUS | MemberStatus | ログイン時の会員ステータス | loginMemberStatusCode | String |
会員とは one-to-one で、会員一人につき必ず一つのセキュリティ情報がある
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER | そのまま one-to-one を構成するためのFKとなる。 | memberId | Integer | |||||
2 | * | ログインパスワード | LOGIN_PASSWORD | VARCHAR | 100 | ログイン時に利用するパスワード。 本当は良くないが、Exampleなのでひとまず暗号化していない。 |
loginPassword | String | |||||||
3 | * | リマインダ質問 | REMINDER_QUESTION | VARCHAR | 50 | パスワードを忘れた際のリマインダ機能における質問の内容。 | reminderQuestion | String | |||||||
4 | * | リマインダ回答 | REMINDER_ANSWER | VARCHAR | 50 | パスワードを忘れた際のリマインダ機能における質問の答え。 | reminderAnswer | String | |||||||
5 | * | リマインダ利用回数 | REMINDER_USE_COUNT | INTEGER | 10 | リマインダを利用した回数。 これが多いと忘れっぽい会員と言えるが、そんなことを知ってもしょうがない。 |
reminderUseCount | Integer | |||||||
6 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
7 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
8 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
9 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String | |||||||||
10 | * | VERSION_NO | BIGINT | 19 | versionNo | Long |
会員のサービス情報(ポイントサービスなど)。
テストケースのために、あえて統一性を崩してユニーク制約経由の one-to-one を表現している。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 会員サービスID | MEMBER_SERVICE_ID | INTEGER | 10 | 独立した主キーとなるが、実質的に会員IDとは one-to-one である。 | memberServiceId | Integer | |||||
2 | o | o | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER | 会員を参照するID。ユニークなので、会員とは one-to-one の関係に。 | memberId | Integer | ||||
3 | o | * | サービスポイント数 | SERVICE_POINT_COUNT | INTEGER | 10 | 購入したら増えて使ったら減る。 | servicePointCount | Integer | ||||||
4 | o | * | サービスランクコード | SERVICE_RANK_CODE | CHAR | 3 | SERVICE_RANK | ServiceRank | どんなランクがあるのかドキドキですね。 | serviceRankCode | String | ||||
5 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
6 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
7 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
8 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String | |||||||||
9 | * | VERSION_NO | BIGINT | 19 | versionNo | Long |
会員のステータスを示す固定的なマスタテーブル。いわゆるテーブル区分値!
業務運用上で増えることはなく、増減するときはプログラム修正ともなうレベルの業務変更と考えられる。
こういった固定的なマスタテーブルには、更新日時などの共通カラムは定義していないが、業務上そういった情報を管理する必要性が低いという理由に加え、ExampleDBとして共通カラムでER図が埋め尽くされてしまい見づらくなるというところで割り切っている。実業務では統一的に定義することもある。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 会員ステータスコード | MEMBER_STATUS_CODE | CHAR | 3 | MEMBER, MEMBER_LOGIN |
MemberStatus | 会員ステータスを識別するコード。 固定的なデータなので連番とか番号にはせず、データを直接見たときも人が直感的にわかるように、例えば "FML" とかの3桁のコード形式にしている。(3って何会員だっけ?とかの問答をやりたくないので) |
memberStatusCode | String | ||||
2 | * | 会員ステータス名称 | MEMBER_STATUS_NAME | VARCHAR | 50 | 表示用の名称。 国際化対応するときはもっと色々考える必要があるかと...ということで英語名カラムがないので、そのまま区分値メソッド名の一部としても利用される。 |
memberStatusName | String | |||||||
3 | * | 説明 | DESCRIPTION | VARCHAR | 200 | 会員ステータスそれぞれの説明。 区分値の一つ一つの要素に気の利いた説明があるとディベロッパーがとても助かるので絶対に欲しい。 |
description | String | |||||||
4 | o | * | 表示順 | DISPLAY_ORDER | INTEGER | 10 | UI上のステータスの表示順を示すNO。 並べるときは、このカラムに対して昇順のソート条件にする。 |
displayOrder | Integer |
退会会員の退会に関する詳細な情報。
退会会員のみデータが存在し、"1 : 0..1" のパターンの one-to-one である。
共通カラムがあってバージョンNOがないパターン。
基本的に更新は入らないが、重要なデータなので万が一のために更新系の共通カラムも。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | MEMBER_ID | INTEGER | 10 | MEMBER | memberId | Integer | |||||||
2 | o | 退会理由コード | WITHDRAWAL_REASON_CODE | CHAR | 3 | WITHDRAWAL_REASON | WithdrawalReason | 定型的な退会した理由を参照するコード。 何も言わずに退会する会員もいるので必須項目ではない。 |
withdrawalReasonCode | String | |||||
3 | 退会理由入力テキスト | WITHDRAWAL_REASON_INPUT_TEXT | CLOB | 2147483647 | 会員がフリーテキストで入力できる退会理由。 もう言いたいこと言ってもらう感じ。サイト運営側としてはこういうのは真摯に受け止めて改善していきたいところ。 |
withdrawalReasonInputText | String | ||||||||
4 | * | 退会日時 | WITHDRAWAL_DATETIME | TIMESTAMP | 23, 10 | 退会した瞬間の日時。 正式会員日時と違い、こっちは one-to-one の別テーブルで管理されている。 |
withdrawalDatetime | LocalDateTime | |||||||
5 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
6 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
7 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
8 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String |
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | PRODUCT_ID | INTEGER | 10 | PURCHASE | productId | Integer | ||||||
2 | o | * | 商品名称 | PRODUCT_NAME | VARCHAR | 50 | ExampleDBとして、コメントの少ないケースを表現するため、あえてコメントを控えている。 実業務ではしっかりとコメントを入れることが強く強く推奨される。「よりによってこのテーブルでやらないでよ!」あわわ、何も聞こえません〜 |
productName | String | ||||||
3 | o | * | 商品ハンドルコード | PRODUCT_HANDLE_CODE | VARCHAR | 100 | これだけは書いておこう、商品を識別する業務上のコード。よく品番とか言うかもしれませんねぇ... | productHandleCode | String | ||||||
4 | o | * | PRODUCT_CATEGORY_CODE | CHAR | 3 | PRODUCT_CATEGORY | productCategoryCode | String | |||||||
5 | o | * | PRODUCT_STATUS_CODE | CHAR | 3 | PRODUCT_STATUS | ProductStatus | productStatusCode | String | ||||||
6 | * | 定価 | REGULAR_PRICE | INTEGER | 10 | regularPrice | Integer | ||||||||
7 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
8 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
9 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
10 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String | |||||||||
11 | * | VERSION_NO | BIGINT | 19 | versionNo | Long |
商品のカテゴリを表現するマスタ。自己参照FKの階層になっている。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 商品カテゴリコード | PRODUCT_CATEGORY_CODE | CHAR | 3 | PRODUCT, PRODUCT_CATEGORY |
自分のテーブルの別のレコードからも参照される。 | productCategoryCode | String | |||||
2 | * | 商品カテゴリ名称 | PRODUCT_CATEGORY_NAME | VARCHAR | 50 | productCategoryName | String | ||||||||
3 | o | 親カテゴリコード | PARENT_CATEGORY_CODE | CHAR | 3 | PRODUCT_CATEGORY | 最上位の場合はデータなし。まさひく自己参照FKカラム! | parentCategoryCode | String |
商品のステータスを表現する固定的なマスタ。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 商品ステータスコード | PRODUCT_STATUS_CODE | CHAR | 3 | PRODUCT | ProductStatus | 商品ステータスを識別するコード。 | productStatusCode | String | ||||
2 | * | 商品ステータス名称 | PRODUCT_STATUS_NAME | VARCHAR | 50 | 表示用の名称、英語名カラムがないのでそのままメソッド名の一部としても利用される。 | productStatusName | String | |||||||
3 | o | * | 表示順 | DISPLAY_ORDER | INTEGER | 10 | もう、ご想像の通りです。 | displayOrder | Integer |
一つの商品に対する購入を表現する(購入履歴とも言える)。
実業務であれば購入詳細というテーブルを作り、「購入という行為」と「その中身(詳細)」を違う粒度のデータとしてそれぞれ管理するのが一般的と言えるでしょう。というか、注文とか請求とかそういうことを考え始めたらもっと複雑になるはずですが、ExampleDBということで割り切っています。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | PURCHASE_ID | BIGINT | 19 | PURCHASE_PAYMENT | purchaseId | Long | ||||||
2 | o+ | o+ | * | 会員ID | MEMBER_ID | INTEGER | 10 | MEMBER | 会員を参照するID。 購入を識別する自然キー(複合ユニーク制約)の筆頭要素。 |
memberId | Integer | ||||
3 | +o | o+ | * | 商品ID | PRODUCT_ID | INTEGER | 10 | PRODUCT | あなたは何を買ったのか? | productId | Integer | ||||
4 | +o | o+ | * | 購入日時 | PURCHASE_DATETIME | TIMESTAMP | 23, 10 | 購入した瞬間の日時。 | purchaseDatetime | LocalDateTime | |||||
5 | * | 購入数量 | PURCHASE_COUNT | INTEGER | 10 | 購入した商品の一回の購入における数量。 | purchaseCount | Integer | |||||||
6 | o | * | 購入価格 | PURCHASE_PRICE | INTEGER | 10 | 購入によって実際に会員が支払った(支払う予定の)価格。 基本は商品の定価に購入数量を掛けたものになるが、ポイント利用や割引があったりと必ずしもそうはならない。 |
purchasePrice | Integer | ||||||
7 | * | 支払完了フラグ | PAYMENT_COMPLETE_FLG | INTEGER | 10 | Flg | この購入に関しての支払いが完了しているか否か。 | paymentCompleteFlg | Integer | ||||||
8 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
9 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
10 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
11 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String | |||||||||
12 | * | VERSION_NO | BIGINT | 19 | versionNo | Long |
購入に対する支払。
分割払いもできるのでmanyとなり、会員からの孫テーブルのテストができてうれしい。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | o | * | 購入支払ID | PURCHASE_PAYMENT_ID | BIGINT | 19 | 連番 | purchasePaymentId | Long | |||||
2 | o | * | 購入ID | PURCHASE_ID | BIGINT | 19 | PURCHASE | 支払い対象の購入へのID | purchaseId | Long | |||||
3 | +o | * | 支払金額 | PAYMENT_AMOUNT | DECIMAL | 10, 2 | 支払った金額。さて、小数点なのはなぜでしょう? | paymentAmount | BigDecimal | ||||||
4 | o+ | * | 支払日時 | PAYMENT_DATETIME | TIMESTAMP | 23, 10 | 支払ったときの日時 | paymentDatetime | LocalDateTime | ||||||
5 | * | 支払方法コード | PAYMENT_METHOD_CODE | CHAR | 3 | PaymentMethod | 手渡しや銀行振込など | paymentMethodCode | String | ||||||
6 | * | REGISTER_DATETIME | TIMESTAMP | 23, 10 | registerDatetime | LocalDateTime | |||||||||
7 | * | REGISTER_USER | VARCHAR | 200 | registerUser | String | |||||||||
8 | * | UPDATE_DATETIME | TIMESTAMP | 23, 10 | updateDatetime | LocalDateTime | |||||||||
9 | * | UPDATE_USER | VARCHAR | 200 | updateUser | String |
主に会員の住所に対応する漠然とした地域。
かなりざっくりした感じではある。唯一の業務的one-to-oneの親テーブルのケース。
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 地域ID | REGION_ID | INTEGER | 10 | MEMBER_ADDRESS | Region | 地域をしっかりと識別するID。 珍しく(固定的な)マスタテーブルとしては数値だが、Exampleなのでやはり色々なパターンがないとね、ってところで。 |
regionId | Integer | ||||
2 | * | 地域名称 | REGION_NAME | VARCHAR | 50 | 地域を漠然と表す名称。 | regionName | String |
会員のサービスレベルを表現するランク。(ゴールドとかプラチナとか)
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | サービスランクコード | SERVICE_RANK_CODE | CHAR | 3 | MEMBER_SERVICE | ServiceRank | サービスランクを識別するコード。 | serviceRankCode | String | ||||
2 | * | サービスランク名称 | SERVICE_RANK_NAME | VARCHAR | 50 | サービスランクの名称。 ゴールドとかプラチナとか基本的には威厳のある名前 |
serviceRankName | String | |||||||
3 | * | サービスポイント発生率 | SERVICE_POINT_INCIDENCE | DECIMAL | 5, 3 | 購入ごとのサービスポイントの発生率。 購入価格にこの値をかけた数が発生ポイント。ExampleDBとして数少ない貴重な小数点ありのカラム。 |
servicePointIncidence | BigDecimal | |||||||
4 | * | 新規受け入れ可能フラグ | NEW_ACCEPTABLE_FLG | INTEGER | 10 | Flg | このランクへの新規受け入れができるかどうか。 | newAcceptableFlg | Integer | ||||||
5 | * | 説明 | DESCRIPTION | VARCHAR | 200 | ランクに関する業務的な説明。 | description | String | |||||||
6 | o | * | 表示順 | DISPLAY_ORDER | INTEGER | 10 | UI上の表示順を表現する番号。 | displayOrder | Integer |
会員に選ばせる定型的な退会理由のマスタ。そういえば、これ表示順カラムがないですねぇ...
No. | PK | ID | UQ | IX | Not Null |
Alias | Name | Type | Size | ForeignTable | ReferrerTable | Classification | ColumnComment | PropertyName | JavaType |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | o | * | 退会理由コード | WITHDRAWAL_REASON_CODE | CHAR | 3 | MEMBER_WITHDRAWAL | WithdrawalReason | withdrawalReasonCode | String | |||||
2 | * | 退会理由テキスト | WITHDRAWAL_REASON_TEXT | CLOB | 2147483647 | 退会理由の内容。 テキスト形式なので目いっぱい書けるが、そうするとUI側できれいに見せるのが大変でしょうね。 |
withdrawalReasonText | String | |||||||
3 | o | * | DISPLAY_ORDER | INTEGER | 10 | displayOrder | Integer |
Classification | Type | Top Comment | Definition | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Flg | implicit | general boolean classification for every flg-column |
|
||||||||||||||||||||
MemberStatus | table | status of member from entry to withdrawal |
|
||||||||||||||||||||
ServiceRank | table | rank of service member gets |
|
||||||||||||||||||||
Region | table | mainly region of member address |
|
||||||||||||||||||||
WithdrawalReason | table | reason for member withdrawal |
|
||||||||||||||||||||
ProductCategory | table | category of product. self reference |
|
||||||||||||||||||||
ProductStatus | table | status for product |
|
||||||||||||||||||||
PaymentMethod | implicit | method of payment for purchase |
|
Created by DBFlute(AutoGenerator)