【问题标题】:Sql: Unique field contraint (slug) across multiple tables (doctrine/symfony)Sql:跨多个表(doctrine/symfony)的唯一字段约束(slug)
【发布时间】:2011-03-08 05:20:48
【问题描述】:

我有许多表将使用 url 'slug' 进行查找。例如,'news' 和 'blog' 都有 'slug' 字段,该字段在学说数据库架构中被定义为唯一字段。

有什么方法可以将这种独特性扩展到两个表:例如,如果有一篇带有 slug= "good-story" 的新闻文章,那么如果我尝试将其作为博客文章的 slug 输入,它将失败?

谢谢 汤姆

【问题讨论】:

  • 您得到想要的答案了吗?如果是这样,你能接受吗?如果没有,你能澄清一下你还在寻找什么吗?通常,您提供的信息越多,就越有可能有人可以帮助您。

标签: php sql symfony1 doctrine unique


【解决方案1】:

取决于您的开发阶段。如果您正在维护应用程序,那么我同意 Bob Jarvis 的建议。看起来像是一堆不连贯的代码。

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

tbl_slug -------------------- 蛞蝓 slug_type -主键(slug,slug_type) -constraint - slug 是表独有的 tbl_news -------------------- ID fk_slug_slug fk_slug_type -约束 - fk_slug_type = '新闻' tbl_blog -------------------- ID fk_slug_slug fk_slug_type -约束 - fk_slug_type = '博客'

【讨论】:

    【解决方案2】:

    据我所知,您不能有一个跨表的 UNIQUE 约束。处理它的一种方法是有一个 SLUG 表,其中“slug”字段将是主键。您需要在 'news' 和 'blog' 上使用 INSERT 触发器,它会尝试将新的 'slug' 插入 SLUG 表中。如果“news.slug”或“blog.slug”已更新,您可能还希望将 UPDATE 触发器放在“news”和“blog”上以更新 SLUG.slug。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 2021-12-13
      • 2012-04-12
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 2013-04-30
      相关资源
      最近更新 更多