跨多个表的MySQL唯一ID

时间:2011-04-26 19:13:48

标签: mysql sql

我有2个具有以下结构的表:

CREATE  TABLE IF NOT EXISTS `car` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(255) NOT NULL ,
  `title` VARCHAR(255) NOT NULL 
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `name_UNIQUE` (`name` ASC) )
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `book` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(255) NOT NULL ,
  `title` VARCHAR(255) NOT NULL 
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `name_UNIQUE` (`name` ASC) )
ENGINE = InnoDB;

我从标题中生成名称列,例如:if title:Foo Bar - >名字:foo-bar。我在URL中使用此值。我认为这个/ car / foo-bar或/ book / foo-bar这两个表中的URL都不是问题。但我现在想要更短的网址:/ foo-bar或/ foo-bar-2。

如何在多个表中使名称值唯一?

2 个答案:

答案 0 :(得分:1)

如果您正在构建一个OO应用程序,您可以将该名称放在一个单独的表中,并将书籍和汽车中的外键添加到“名称”......或者该表在您的应用程序中的含义,例如产品

否则你可以使用触发器强制执行它,但我不知道mysql中的触发器是如何工作的。

答案 1 :(得分:1)

如果你想强制它是唯一的,那么你可以创建一个名为name_reference的第三个表,例如使用字段name和一个名为{{1的字段的组合的原始键}}。然后你可以让书和车有type的外键。