SQL - 元组作为主键

SQL - Tuple as Primary Key

如何从 table 的元组创建主键?

例子-

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

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

我正在使用 MySql 14.14/5.5.50 - 但我希望这没关系。

请注意,复合键不能解决此问题,因为 a_id/b_id 上的复合键仍会允许具有逆元组顺序的行作为新行

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

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

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

另一种方法是要求 alpha < beta(使用 check 约束),然后在 (alpha, beta).

上构建唯一索引

但是,MySQL 支持以下 none:

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

所以,剩下的触发器。

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