SQL - 作为主键的元组

时间:2017-01-09 23:28:11

标签: sql primary-key unique-constraint

如何从表中创建元组中的主键?

示例 -

table a: [id|name]
table b: [id|name]
table axb:[a_id|b_id]

现在我们要为axb添加一个主键,以便元组{alpha,beta}是唯一的。换句话说,该表不能包含行(alpha,beta)和(beta,alpha)。这将扩展到ntuples但我要求夫妻开始保持这种简单。

我正在使用MySql 14.14 / 5.5.50 - 但我希望这不重要。

请注意,复合键无法解决此问题,因为a_id / b_id上的复合键仍然允许具有反向元组顺序的行作为新行

2 个答案:

答案 0 :(得分:2)

不幸的是,您需要在MySQL中使用触发器来执行此操作。许多数据库都支持以下语法:

create unique index unq_t_alpha_beta on (least(alpha, beta), greatest(alpha, beta));

虽然语法可能不同,但表达式或计算列上的索引可以解决此问题。

另一种方法是要求alpha < beta(使用check约束),然后在(alpha, beta)上构建唯一索引。

但是,MySQL不支持以下任何一项:

  • check约束
  • 表达式索引
  • 计算列

因此,留下了触发器。

答案 1 :(得分:0)

将它扔出去:你能否使用生成的列,它总是按顺序组合列(所以alpha,beta = alphabeta和beta,alpha = alphabeta),然后在生成的列上创建一个唯一索引? MySql不是我的包,但这说明应该可以:https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html