1

我有三张桌子:

`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
  • 如果品牌被删除,级联 products.brand_id
  • 如果产品被删除,级联所有评论

有哪些替代方案?

4

2 回答 2

1

在 MySQL 中执行此操作的唯一方法是创建一个具有单列的AUTO_INCREMENT表,插入到该表中,获取最后插入的 ID(具体执行方式取决于您使用的 MySQL 客户端库),然后使用它将行插入其他表之一时的 ID。

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

于 2012-07-25T04:01:07.053 回答
0

看来您想要一个跨项目的唯一标识符,但密度或单调性似乎不是要求...... UUID () 就足够了吗?

于 2012-08-09T12:00:09.467 回答