0

我有一个小问题,我想请你帮忙 :)

所以为了简单起见,我使用了一个 oracle 数据库,我想在我的一个表上创建一个“检查约束”,即下面。

表 XY

属性 A || 属性 B || 属性 C

对于属性 A 和 B,用户可以添加他想要的任何内容 - 对于属性 C,我想使用用户定义的函数使用“检查约束” - 检查 A 和 B 的组合是否有效。

我的问题是,我不知道如何实现函数的输入参数,所以我可以在用户在数据库中创建条目时进行检查。

换句话说,用户已经向 A 添加了 1,B 添加了 3,一旦他想为 C 添加一个条目,我想(例如)检查A + B = 4

我希望你能帮助我,因为我现在要去香蕉x)

亲切的问候亚历克斯

编辑(从下面的评论中复制)

我有 3 张桌子:

  1. 团体
  2. GROUP_LIST
  3. TM值

GROUP包括 a 的 ID GROUPGROUP_LIST是 theGROUP和 the之间的连接表TM- 所以在GROUP_LIST我将 aGROUP与 TM 连接 - 但可以将 1GROUP与多个TMfe 连接:

GROUPID || TM
1       || 1
1       || 2
1       || 3
2       || 1

依此类推,我的真正问题如下:现在,我想要检查 TM 属性,该属性检查我尝试填写的 TM 是否已经存在于同一个 GROUPID 中。我希望现在清楚我的意图是什么......

4

3 回答 3

3

要求用户为特定列输入“正确”值似乎毫无意义。我建议不要将其定义C为普通列,而是将其定义为计算列,例如:

CREATE TABLE TBL
  (A    NUMBER,
   B    NUMBER,
   C    AS (A + B));

这样,C 将始终被正确计算。

SQLFiddle在这里

祝你好运。

编辑

根据下面评论中来自 OP 的信息,该答案似乎无法满足真正的需求,因此我添加了第二个答案(如下)。我考虑删除这个答案,但因为它包含来自 OP 的评论,它添加了重要信息(我已经编辑到问题中)我决定保留这个答案,但通过制作这个答案社区 Wiki 来丧失代表收益。

于 2015-09-01T17:20:12.937 回答
1

如果您使用离线检查约束语法,您可以使用特定表的任何字段定义条件,例如:

ALTER TABLE xy ADD CONSTRAINT mymulticheck CHECK (A + B = C);

请注意,您对这种类型的约束有很多限制,例如,您不能使用用户定义的函数,显然条件是固定的并且对于所有行都是相同的。

于 2015-09-01T14:03:27.250 回答
0

根据来自 OP 的新信息,解决此问题的正确方法似乎是向 GROUP_LIST 表添加一个 UNIQUE 约束,以确保 GROUP_ID 和 TM 的组合是唯一的:

ALTER TABLE GROUP_LIST
  ADD CONSTRAINT GROUP_LIST_UNIQUE_1
    UNIQUE (GROUP_ID, TM);

祝你好运。

于 2015-09-02T12:07:47.547 回答