sql数据库中列值的多重约束

时间:2014-01-08 14:35:04

标签: mysql sql database sqlite database-design

我有三个表,一个项目表,可能有很多项目,一个主题表,每个项目都有很多主题和条件表,每个主题都有条件,项目可能有很多条件。< / p>

如果主题必须位于其中一个项目中,如何根据项目链接的条件限制主体可以拥有的条件。

希望这是有道理的。另外,我正在考虑使用sqlite但是如果不可能用数据库系统做这样的事情那么有可能吗?优选地是免费的和基于sql的,即mysql或postgresql。

感谢。

编辑:一些例子;

项目A具有条件1,2和3.所有条件都来自具有条件1,2,3,4,5的条件表。现在主题X是项目A的一部分,所以只允许假设条件1,2,3不是4或5。

这可能吗?

2 个答案:

答案 0 :(得分:1)

看起来你需要类似的东西:

enter image description here

此设计的关键方面是识别关系的使用以及生成的复合键。这允许我们迁移PROJECT.PROJECT_ID:

  • 不仅直接指向SUBJECT
  • 还要通过CONDITION再到SUBJECT。

迁移的这两个“路径”最终会合并到同一个字段中(注意SUBJECT.PROJECT_ID前面的FK1,FK2),这可确保当主题连接到条件时,它们都必须连接到相同的项目。

答案 1 :(得分:0)

create table Condition(
    Id int not null, --PK
    Description varchar(50)
)

create table ProjectCondition(
    Id int not null, --PK
    ProjectId int not null, -- FK to Project PK#
    ConditionId int not null -- FK to Condition PK
)

create table ProjectSubject(
    Id int not null, --PK
    ProjectId int not null, -- FK to Project PK
    SubjectId int not null -- FK to Subject PK
)

create table ProjectSubjectCondition(
    Id int not null, -- PK
    ProjectConditionId int not null -- FK to ProjectContion PK
)

假设:

  • 主题存在与项目分开(即有一个 主题表在某处)
  • 条件相同

(如果他们错了,没有多大区别。)

通过将ProjectSubjectCondition链接到ProjectConditions,项目主题的条件必须是项目的条件。

干杯 -