2012-07-25 62 views
1

我有三个表:共享AUTO_INCREMENT`id`和表关系

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

有更多的列,尽管这些相关的问题,唯一的问题。

我希望所有三个表共享相同的auto_incrementid(即使id与三个表唯一交叉)。后者可以很容易地通过使用公用表引用到合适的表来解决:

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

的问题是,在原方案中的所有表有国外限制:

  • 如果类别被删除,设置NULL products.category_id
  • 如果品牌被删除,级联products.brand_id
  • 如果产品被删除,级联的全部评论

有什么选择?

回答

1

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

(这是一个耻辱的PostgreSQL是不是比MySQL更受欢迎,因为它恰好支持此功能外的开箱:你只需要共享表之间的一个序列对象)

0

它似乎你想要跨项目的唯一标识符,但密集或单调似乎并不需要...... UUID()就足够了吗?