【发布时间】:2016-09-16 08:59:11
【问题描述】:
我在 MySQL 中工作,但这是一般的关系数据库查询。
我们有一个博客 CMS,用户可以在博客上线后更改其 URL,我们希望将任何旧博客 URL 301 设置为新的。
我在以下两个表格选项之间纠结(所有字段都不是 NULL):
选项 1 - 带有主要标志的 HAS_MANY
-
网址
- id (PK)
- 网址(唯一)
- blog_id(FK 到博客 - id)
- is_primary(0 或 1)
-
博客
- id (PK)
- ...其他字段...
缺点:博客没有或有多个主要网址时可能存在完整性问题。
优点:多或一的关系结构相似。
选项 2 - HAS_MANY 和 BELONGS_TO 混合
-
网址
- id (PK)
- 网址(唯一)
- blog_id(FK 到博客 - id)
-
博客
- id (PK)
- url_id(FK 到主 url - id)
- ...other_fields...
缺点:可能存在博客的 url_id 和 url 的 blog_id 不匹配的完整性问题。
优势:保证每个博客有一个主 URL。
有没有人对这些选项有任何经验,或者可以想到任何其他理由来使用/打折其中一个?或者可能是更好的第三种选择?
更新
刚刚意识到选项 2 无法在 url 的 blog_id 或博客的 url_id 中不允许 NULL 的情况下进行 INSERT。
【问题讨论】:
-
primary_flag是干什么用的? -
@RickJames 表示当前活动的 URL,可能是一个令人困惑的术语选择。
标签: mysql database-design relational-database