共享auto_increment`id`和表关系

时间:2012-07-25 03:57:49

标签: mysql sql

我有三张桌子:

`brands`        (`id`, `name`)
`categories`    (`id`, `name`)
`products`      (`id`, `name`, `brand_id`, `category_id`)

有更多列,但这些是唯一与此问题相关的列。

我希望所有三个表共享相同的auto_increment id(即使id唯一交叉三个表)。后者可以通过使用引用适当表的公共表来轻松解决:

`entries` (`id`, `name`, `type_id`)

问题在于,在原始场景中,所有表都有外部约束:

  • 如果删除了类别,请设置NULL products.category_id
  • 如果品牌被删除,则cascade products.brand_id
  • 如果产品被删除,则级联所有评论

有哪些替代方案?

2 个答案:

答案 0 :(得分:1)

在MySQL中你能做到这一点的唯一方法就是创建一个带有单个AUTO_INCREMENT列的表,插入到这个表中,获取最后插入的ID(你究竟是如何做到这一点取决于哪个MySQL客户端库您正在使用),然后在将行插入其他表中时使用此ID。

(遗憾的是PostgreSQL并不比MySQL更受欢迎,因为它支持开箱即用的这个功能:你只需要在表之间共享一个序列对象。)

答案 1 :(得分:0)

看起来您需要跨项目的唯一标识符,但密集度或单调性似乎不是要求... UUID()是否足够?