gpt4 book ai didi

mysql - 两个外键,其中一个不为 NULL : How to solve this in SQL?

转载 作者:可可西里 更新时间:2023-11-01 07:48:40 24 4
gpt4 key购买 nike

我有一张表 time。时间条目(1:n 关系)要么属于project 条目,要么属于special_work 条目。必须设置项目 ID 或 special_work id,两者都不能设置(独占或)。

CREATE TABLE `time` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`project` int(20) NOT NULL,
`special_work` int(20) NOT NULL,
`date` date NOT NULL,
`hours` float NOT NULL,
`time_from` time DEFAULT NULL,
`time_to` time DEFAULT NULL,
`notes` text NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`project`) REFERENCES `project`(`id`)
FOREIGN KEY (`special_work`) REFERENCES `special_work`(`id`)
) DEFAULT CHARSET=utf8;

我怎样才能用 SQL 写这个?除了触发器之外还有什么办法吗?

如果您确定这是糟糕的数据库设计 - 是否有更好的建模方法?但是我想要两个不同的时间表

我的数据库是 Mysql 5.5 InnoDB。

最佳答案

您的数据模型没问题。在大多数数据库中,您还需要添加一个 check 约束:

alter table `time` add constraint chk_time_project_special_work
check (project is not null xor special_work is null);

但是,MySQL 不支持检查约束。如果您真的愿意,可以使用触发器来实现逻辑。

关于mysql - 两个外键,其中一个不为 NULL : How to solve this in SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45349583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com