【问题标题】:How to structure one to optional to many database?如何构建一对多数据库的可选结构?
【发布时间】:2017-06-19 23:54:53
【问题描述】:

我正在为一家报纸创建一个网站。它的所有文章都有一个版块,大多数文章都直接在它们的版块下:/section_name/article_name。但是,有些文章不直接属于他们的部门——它们属于一个小节:/section_name/subsection_name/article_name/。如果不是所有文章都在一个小节下,我将如何构建这个数据库?

我最初的想法是拥有ONE Section has MANY Subsections has MANY Articles。但是,我将如何处理“可选小节”问题?

一种解决方案是建立两个关系:ONE Subsection has MANY Articles 和 ONE Section has MANY Articles。这样,一篇文章就可以在一个部分和一个小节中。但是,这对我来说似乎并不直观。 Subsection 与 Section 完全没有关系?有没有其他解决办法?

还有一点需要注意:请求文章时使用以下参数:/:section_name(/:subsection_name)/:article_name,其中冒号表示参数,括号表示可选参数。

【问题讨论】:

    标签: sql schema relationship one-to-many optional


    【解决方案1】:
    1. 您自己建议的方式,但在小节之间添加外键。
    2. 为每个部分建立一个默认或“主要”子部分,以便所有文章仅链接到一个子部分。
    3. 使用带有“父部分”列的单个部分/子部分表。这将允许部分/子部分嵌套到任何深度,您可能希望使用应用程序规则进行控制。

    编辑: 在第三种方法中,section/subsection 表将有一个外键。如果不为空,则该外键标识父节。这种结构可以表示任何宽度或深度的子部分树,并且文章可以与该树中的任何部分相关联。对于您概述的简单场景,这种类型的结构可能有点矫枉过正,但足够灵活,可以适应概念模型的某些扩展,而无需更改物理结构。

    【讨论】:

    • 您能否进一步解释一下您的第三个解决方案?
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2016-10-06
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多