我目前正在为我正在开发的项目设计关系数据库。
我不确定最好的方法,我会尽力解释。
如果我有实体:
SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID)
和
PURCHASE(PURCHASE_ID, PURCHASE_TYPE, PURCHASE_AMOUNT, CUSTOMER_ID)
如果每个实体中的PURCHASE_TYPE
和SALE_TYPE
只能现金或卡 ..
如果值得用这种结构创建一个名为E.g. Transaction Type
的新实体
TRANSACTION_TYPE(TYPE_ID, PAYMENT_TYPE)
然后将PURCHASE_TYPE
和SALE_TYPE
替换为TYPE_ID
作为另外两个实体的外键?
提前感谢任何回复:)我希望我能够很好地解释它并使用正确的术语。
答案 0 :(得分:1)
如您所述,付款类型为:
因此,您可以选择SALE_TYPE
或PURCHASE_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
的数据类型略有变化。