我正在MySQL中工作,但这是一个一般的关系数据库查询。

我们有一个博客CMS,用户可以在该博客CMS上线后更改它的URL,我们希望将任何旧的博客URL 301更改为新的URL。

我在以下两个表选项(所有字段NOT NULL)之间感到困惑:

选项1-具有主要标志的HAS_MANY


网址


id(PK)
网址(唯一)
blog_id(从FK到博客-id)
is_primary(0或1)

博客


id(PK)
...其他领域...



缺点:博客没有主URL或多个主URL时可能出现完整性问题。

优点:许多或一个的相似关系结构。

选项2-HAS_MANY和BELONGS_TO混合


网址


id(PK)
网址(唯一)
blog_id(从FK到博客-id)

博客


id(PK)
url_id(从FK到主网址-ID)
...其他领域...



缺点:博客的url_id和url的blog_id不匹配的可能的完整性问题。

优点:每个博客保证一个主URL。



是否有人对这些选项有任何经验,或者可以想到使用/打折另一个原因的任何其他原因?还是更好的第三选择?

更新

刚刚意识到,选项2使INSERT成为不可能,而在URL的blog_id或blog的url_id中不允许NULL。

最佳答案

除了上述内容,我将考虑如下内容:


博客


ID
url_id

网址


ID
网址
redirect_url_id



在这种情况下,redirect_url_id是从url表到其自身的自引用外键。如果URL需要重定向,则将其重定向到的URL的ID放在此列中。

这样可以避免您在列出的两个选项中注意到的缺点。唯一的缺点是对于主URL,您只需要将redirect_url_id保留为NULL,但这是可以接受的。

无论您做什么,都绝对要避免选择2,双向键是-如您所知-是行不通的。

关于mysql - 具有主要BELONGS_TO的HAS_MANY的关系数据库设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39450382/

10-13 05:26
查看更多