小编Bar*_*xto的帖子

两个可为空的列之一需要具有值

无解释问题:

反正有 2 个空值的约束,总是需要 1 有 value 吗?例如,两个日期列都为空,但至少有1 个需要有值

问题描述:

假设我有一个名为 Expense 的表

并有 2 个日期:

prevision_expense_expiration_date DATE NULLABLE 费用_payment_date DATE NULLABLE

这两列的逻辑如下:

我买了一些东西,我知道我必须为它付款,某个日期,比如电话费。我会将此作为费用输入,并带有费用支付日期。这个日期是我应该付款的假定日期,而不是实际付款日期,例如发票的到期日期。

在其他情况下,我出售某些提供商的礼品卡以获取其服务。当客户兑换卡时,我可能需要向我的提供商购买服务转移给我的客户。因此,礼品卡有一个到期日期,我想为该“费用”做一个预想,而不是在礼品卡有效期内作为费用插入,如果礼品卡过期,则该“费用”不应进入帐户系统。

我知道我可以有 2 个相同的表,称为 prevision_expense 和confirmed_expense,但听起来不对,所以我在同一个表中,2 个日期,可以为空,但我想限制或其他东西,以便始终需要一个。

还有另一种可能的策略:

payment_date 日期非空 is_prevision_date BOOL 非空

因此,在这种情况下,如果日期是 prevision bool 值将为 1,否则将为 0。没有空值,一切都很好。除了我想要在第一次有一个预设日期时存储两个值的选项,然后(让我们说两天后)有该费用的确认日期,在这种情况下,使用策略 2 我将没有该选项。

我在数据库设计中做错了什么吗?:D

mysql null database-design

12
推荐指数
1
解决办法
1万
查看次数

实现一对零或一关系

假设我正在使用 SQL 平台并希望实现基数一对零或一(1-0..1) 的关系。这种情况与业务环境有关,我们可以说:

  • Aproduct可以有零或一price

所以:

  1. 下面显示的两种场景(DDL 结构)之间有什么区别?
  2. 什么时候应该优先选择另一个?
  3. 他们中的任何一个被认为是一个糟糕的设计吗?

场景一:

CREATE TABLE product
(
    product_id       INT      NOT NULL,
    name             CHAR(30) NULL,
    product_price_id INT      NULL,
    CONSTRAINT PK_product       PRIMARY KEY (product_id),
    CONSTRAINT UQ_product_price UNIQUE      (product_price_id)
);

CREATE TABLE product_price
(
    product_price_id INT     NOT NULL,
    price            DECIMAL NOT NULL,
    tax_rate         DECIMAL NOT NULL,
    currency_id      INT     NOT NULL,
    CONSTRAINT PK_product_price            PRIMARY KEY (product_price_id),
    CONSTRAINT FK_product_price_to_product FOREIGN KEY (product_price_id)
        REFERENCES product (product_id)
);
Run Code Online (Sandbox Code Playgroud)

场景2:

CREATE TABLE product
( …
Run Code Online (Sandbox Code Playgroud)

schema database-design

4
推荐指数
1
解决办法
7232
查看次数

标签 统计

database-design ×2

mysql ×1

null ×1

schema ×1