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

时间:2016-03-13 17:01:37

标签: mysql oracle entity-framework rdbms

我目前正在为我正在开发的项目设计关系数据库。

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

如果我有实体:

SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID)

PURCHASE(PURCHASE_ID, PURCHASE_TYPE, PURCHASE_AMOUNT, CUSTOMER_ID)

如果每个实体中的PURCHASE_TYPESALE_TYPE只能现金 .. 如果值得用这种结构创建一个名为E.g. Transaction Type的新实体

TRANSACTION_TYPE(TYPE_ID, PAYMENT_TYPE)

然后将PURCHASE_TYPESALE_TYPE替换为TYPE_ID作为另外两个实体的外键?

提前感谢任何回复:)我希望我能够很好地解释它并使用正确的术语。

1 个答案:

答案 0 :(得分:1)

如您所述,付款类型为:

  • 现金

因此,您可以选择SALE_TYPEPURCHASE_TYPE AS ENUM的数据类型。

如果支付类型的数量会更大,那么最好将类型保存在一个单独的表中,就像你说的那样,并用外键约束替换type字段。

因此,enum表的SALE数据类型如下所示:

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表。

请注意 SALE_TYPE枚举('现金','卡')CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

总之,我会保留原始结构,使*_Type字段i.e. ENUM的数据类型略有变化。