首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >每个关系约束只有一个处于活动状态

每个关系约束只有一个处于活动状态
EN

Stack Overflow用户
提问于 2019-06-14 02:57:58
回答 2查看 71关注 0票数 1

所以我对我的作业有这个问题。我有两个实体: Order,Gifr_cupon。我有两个表: Orders,Gift_Cupons。

每个订单可以有多个杯子,也可以没有。每个Cupon都绑定到no或单个订单。但每个订单只能激活一个can。

如何通过约束来实施这一点?

下面是DDL的逻辑视图和ER视图:

DLL:

代码语言:javascript
复制
CREATE TABLE gift_cupons (
cupon_id         INTEGER NOT NULL,
order_order_id   INTEGER,
active           INTEGER NOT NULL
);

ALTER TABLE gift_cupons ADD CONSTRAINT gift_cupon_pk PRIMARY KEY ( cupon_id 
);
ALTER TABLE gift_cupons ADD CHECK gift_cupon_check CHECK(active IS NULL OR ( active >= 0 AND active <=1 ) );

CREATE TABLE orders (
order_id INTEGER NOT NULL
);

ALTER TABLE orders ADD CONSTRAINT order_pk PRIMARY KEY ( order_id );

ALTER TABLE gift_cupons
ADD CONSTRAINT gift_cupon_order_fk FOREIGN KEY ( order_order_id )
    REFERENCES orders ( order_id );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 03:12:50

有点

代码语言:javascript
复制
Cupon - is bound to -> Order;
Order - has active -> Cupon;

Cupon (
Id PK,
orderId FK Order.Id,
Unique ( Id, orderId) -- any superset  of PK is unique
);

Order (
Id PK
ActiveCuponId,
(Id, ActiveCuponId) FK Cupon( OrderId, Id)
);

请参阅fiddle https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=596b30905d02a9e5c799b16da5fff5ab

票数 2
EN

Stack Overflow用户

发布于 2019-06-14 03:12:42

gift_cupons表中删除ACTIVE列,并将此状态替换为orders表中的外键,如下所示:

代码语言:javascript
复制
CREATE TABLE gift_cupons (
cupon_id         INTEGER NOT NULL,
order_order_id   INTEGER,
);

ALTER TABLE gift_cupons ADD CONSTRAINT gift_cupon_pk PRIMARY KEY ( cupon_id 
);

CREATE TABLE orders (
order_id INTEGER NOT NULL
active_cupon INTEGER -- nullable
);

ALTER TABLE orders ADD CONSTRAINT order_pk PRIMARY KEY ( order_id );

ALTER TABLE gift_cupons
ADD CONSTRAINT gift_cupon_order_fk FOREIGN KEY ( order_order_id )
    REFERENCES orders ( order_id );

alter table orders
add constraint order_active_cupon_fk foreign key (active_cupon)
    references gift_cupons (cupon_id);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56586988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档