关系数据库设计 - 为付款类型创建实体 Class?

Relational Database Design - Create an Entity Class for Payment Type?

我目前正在为我正在进行的项目设计一个关系数据库。

我不确定最好的方法,我会尽力解释。

如果我有实体:

SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID)

并且,

PURCHASE(PURCHASE_ID, PURCHASE_TYPE, PURCHASE_AMOUNT, CUSTOMER_ID)

如果每个实体中的PURCHASE_TYPESALE_TYPE只能是Cash OR Card.. 如果值得创建一个新的实体,要求 E.g. Transaction Type 具有这种结构

TRANSACTION_TYPE(TYPE_ID, PAYMENT_TYPE)

然后用 TYPE_ID 替换 PURCHASE_TYPESALE_TYPE 作为其他 2 个实体的外键?

提前感谢您的任何回复 :) 我希望我解释得足够好并使用了正确的术语。

如您所述,付款类型为:

  • 现金
  • 卡片

所以您可以更喜欢 SALE_TYPEPURCHASE_TYPE 的数据类型 AS ENUM.

如果支付类型的数量会更多,那么最好将类型保持在单独的 table 中,如您所说,并将类型字段替换为外键约束。

所以 enum 数据类型你的 SALE table 看起来像:

CREATE TABLE `SALE` (
`SALE_ID`  int(11) NOT NULL AUTO_INCREMENT ,
`SALE_TYPE`  enum('Cash','Card') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`SALE_AMOUNT`  decimal(18,4) NULL DEFAULT NULL ,
`CUSTOMER_ID`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`SALE_ID`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=COMPACT
;

PURCHASE table.

也应如此

注意 SALE_TYPE enum('Cash','Card') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,

简而言之,我会继续保留原始结构,在您的 *_Type 字段 i.e. ENUM.

的数据类型中稍作更改