我有很多桌子会用url'slug'查找。例如,'news'和'blog'都有'slug'字段,它被定义为doctrine数据库模式中的唯一字段。
有没有什么方法可以在两个表中扩展这种唯一性:例如,如果有一篇新闻文章有slug =“good-story”,那么如果我试图将其作为博客文章的slug进入,那么它将会失败?
由于 汤姆
答案 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'