我正在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/