Sql:跨多个表的唯一字段约束(slug)(doctrine / symfony)

时间:2010-06-25 10:03:10

标签: php sql symfony1 doctrine unique

我有很多桌子会用url'slug'查找。例如,'news'和'blog'都有'slug'字段,它被定义为doctrine数据库模式中的唯一字段。

有没有什么方法可以在两个表中扩展这种唯一性:例如,如果有一篇新闻文章有slug =“good-story”,那么如果我试图将其作为博客文章的slug进入,那么它将会失败?

由于 汤姆

2 个答案:

答案 0 :(得分:2)

据我所知,你不能拥有跨越表格的独特约束。处理它的一种方法是使用SLUG表,其中'slug'字段将是主键。你需要在'news'和'blog'上使用INSERT触发器,它会尝试将新的'slug'插入到SLUG表中。您可能还想在'news'和'blog'上放置UPDATE触发器,以便在更新'news.slug'或'blog.slug'时更新SLUG.slug。

我希望这会有所帮助。

答案 1 :(得分:2)

取决于您在开发中的位置。如果你正在维护应用程序,那么我同意Bob Jarvis的建议。看起来像是一堆断开连接的代码。

您所描述的是属于自己的表中的实体。考虑到这一点,我就是这样建模的。


tbl_slug
--------------------
slug
slug_type
-primary key ( slug, slug_type )
-constraint - slug is unique to table


tbl_news
--------------------
id
fk_slug_slug
fk_slug_type
-constraint - fk_slug_type = 'news'


tbl_blog
--------------------
id
fk_slug_slug
fk_slug_type
-constraint - fk_slug_type = 'blog'