首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在M:M中强制1:M关系?

如何在M:M中强制1:M关系?
EN

Stack Overflow用户
提问于 2021-11-26 19:55:16
回答 1查看 53关注 0票数 0

我正在设计一个数据库模式。

目前有2张表格:

TaskName)

  • Description
  1. 任务(TaskID,DescriptionID,Description)

一个任务可以有多个描述,但是相同的描述不应该被多个任务共享。描述可以有0或1个任务(用户应该能够在没有任务的情况下添加描述,并能够在以后链接任务)。

选项1:

在Description表中添加TaskID作为可空外键。

选项2

相反,我可以创建另一个名为TaskDescription(RowID、TaskID、DescriptionID)的表。但是现在它是一个M:M.任务可以有多个描述,一个描述可以被多个任务共享。在这种情况下,如何防止多个任务共享相同的描述?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-27 12:11:32

相反,我可以创建另一个名为

(RowID、TaskID、DescriptionID)的表。但是现在它是一个M:M.任务可以有多个描述,一个描述可以被多个任务共享。在这种情况下,如何防止多个任务共享相同的描述?

只有两个具有复合主键的列(显然,在这两个列上)足以处理另一个表,以及唯一索引descriptionID上,它将强制执行

,但同一描述不应由多个任务共享

类似这样的东西(Oracle语法;忽略它)。我希望通过看一些代码来理解我的意思更容易一些,而不是阅读我的非英语口语描述):

代码语言:javascript
复制
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);

这样做,数据库将处理一切,如果您试图违反任何强制约束,则会引发错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70129446

复制
相关文章

相似问题

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