我正在设计一个数据库模式。
目前有2张表格:
TaskName)
一个任务可以有多个描述,但是相同的描述不应该被多个任务共享。描述可以有0或1个任务(用户应该能够在没有任务的情况下添加描述,并能够在以后链接任务)。
选项1:
在Description表中添加TaskID作为可空外键。
选项2
相反,我可以创建另一个名为TaskDescription(RowID、TaskID、DescriptionID)的表。但是现在它是一个M:M.任务可以有多个描述,一个描述可以被多个任务共享。在这种情况下,如何防止多个任务共享相同的描述?
发布于 2021-11-27 12:11:32
相反,我可以创建另一个名为
(RowID、TaskID、DescriptionID)的表。但是现在它是一个M:M.任务可以有多个描述,一个描述可以被多个任务共享。在这种情况下,如何防止多个任务共享相同的描述?
只有两个具有复合主键的列(显然,在这两个列上)足以处理另一个表,以及唯一索引在descriptionID上,它将强制执行
,但同一描述不应由多个任务共享
类似这样的东西(Oracle语法;忽略它)。我希望通过看一些代码来理解我的意思更容易一些,而不是阅读我的非英语口语描述):
create table taskDescription
(taskID number constraint fk_td_task references task (task_id),
descriptionID number constriant fk_td_desc references description (descriptionID),
--
constraint pk_td primary key (taskID, descriptionID)
);
create unique index ui1_td on taskDescription (descriptionID);这样做,数据库将处理一切,如果您试图违反任何强制约束,则会引发错误。
https://stackoverflow.com/questions/70129446
复制相似问题