反正有 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
假设我正在使用 SQL 平台并希望实现基数一对零或一(1-0..1) 的关系。这种情况与业务环境有关,我们可以说:
product可以有零或一price。所以:
场景一:
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)