Mysql 关系数据库设计-为付款类型创建实体类?
我目前正在为一个项目设计一个关系数据库 我不确定做这件事的最佳方式,我会尽可能地解释清楚 如果我有一个实体:Mysql 关系数据库设计-为付款类型创建实体类?,mysql,oracle,entity-framework,rdbms,Mysql,Oracle,Entity Framework,Rdbms,我目前正在为一个项目设计一个关系数据库 我不确定做这件事的最佳方式,我会尽可能地解释清楚 如果我有一个实体: SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID) 以及 如果每个实体中的购买类型和销售类型只能是现金或卡。。 是否值得使用此结构创建一个名为的新实体,例如交易类型 TRANSACTION\u TYPE(TYPE\u ID,PAYMENT\u TYPE) 然后将购买类型和销售类型替换为类型ID作为另两个实体的外键 提前感谢您的回复:)我
SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID)
以及
如果每个实体中的购买类型
和销售类型
只能是现金或卡。。
是否值得使用此结构创建一个名为的新实体,例如交易类型
TRANSACTION\u TYPE(TYPE\u ID,PAYMENT\u TYPE)
然后将购买类型
和销售类型
替换为类型ID
作为另两个实体的外键
提前感谢您的回复:)我希望我解释得足够好,并且使用了正确的术语 如您所述,付款类型为:
- 现金
- 卡片
因此,您可以将SALE\u TYPE
或PURCHASE\u TYPE
的数据类型设置为ENUM
如果支付类型的数量会更大,那么最好像您所说的那样将类型保存在单独的表中,并用外键约束替换类型字段
因此,使用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
;
对于采购
表格,也应如此
请注意,SALE\u TYPE
enum('Cash','Card')字符集utf8 COLLATE utf8\u general\u ci NULL DEFAULT NULL,
总之,,我倾向于保持原始结构,在*\u type
字段的数据类型上略有变化,即ENUM
,因为类型的数量本质上是恒定的,所以可以使用ENUM
数据类型。有没有一种方法可以在概念和逻辑设计阶段使用“ENUM”来表示这一点在这一点上,我需要做的就是交付。还是我应该保持原来的结构?Fwiw,我会有一个单独的支付类型表。这允许您在将来添加付款方式(例如PayPal),而无需修改您的结构。
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
;