【问题标题】:Relational Database Design - Create an Entity Class for Payment Type?关系数据库设计 - 为支付类型创建实体类?
【发布时间】:2016-06-28 15:18:26
【问题描述】:

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

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

如果我有一个实体:

SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID)

和,

PURCHASE(PURCHASE_ID, PURCHASE_TYPE, PURCHASE_AMOUNT, CUSTOMER_ID)

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

TRANSACTION_TYPE(TYPE_ID, PAYMENT_TYPE)

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

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

【问题讨论】:

  • 由于类型的数量本质上是恒定的,因此您可以使用 Enum 数据类型。
  • 有没有办法在概念和逻辑设计阶段使用“枚举”来表示,因为这就是我现在需要交付的全部内容。还是应该只保留原来的结构?
  • Fwiw,我有一个单独的付款类型表。这允许您在未来添加付款方式(例如 PayPal),而无需修改您的结构。

标签: mysql oracle entity-framework rdbms


【解决方案1】:

正如您提到的付款类型是:

  • 现金

因此您可以更喜欢使用SALE_TYPEPURCHASE_TYPE AS 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
;

PURCHASE 表也应如此。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多