我有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。
如何在多个表中使名称值唯一?
答案 0 :(得分:1)
如果您正在构建一个OO应用程序,您可以将该名称放在一个单独的表中,并将书籍和汽车中的外键添加到“名称”......或者该表在您的应用程序中的含义,例如产品
否则你可以使用触发器强制执行它,但我不知道mysql中的触发器是如何工作的。
答案 1 :(得分:1)
如果你想强制它是唯一的,那么你可以创建一个名为name_reference
的第三个表,例如使用字段name
和一个名为{{1的字段的组合的原始键}}。然后你可以让书和车有type
的外键。