如何从表中创建元组中的主键?
示例 -
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上的复合键仍然允许具有反向元组顺序的行作为新行
答案 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