如何将一个结构化为多个数据库的可选项?

时间:2017-06-19 23:54:53

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

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

我最初的想法是ONE Section has MANY Subsections has MANY Articles。但是接下来我将如何处理"可选的小节"问题?

一种解决方案是建立两种关系:ONE Subsection has MANY ArticlesONE Section has MANY Articles。这样,文章既可以是部分也可以是子部分。但是,这对我来说似乎并不直观; Subsection根本与Section无关?还有其他解决方案吗?

另一个注意事项:请求文章使用以下参数:/:section_name(/:subsection_name)/:article_name,其中冒号标记参数,括号标记可选参数。

1 个答案:

答案 0 :(得分:0)

  1. 您自己建议的方式,但是从子节到节添加外键。
  2. 为每个部分建立默认或“主要”子部分,因此所有文章仅链接到子部分。
  3. 使用单个部分/子部分表,其中包含“父部分”列。这将允许部分/子部分嵌套到任何深度,您可能希望使用应用程序规则来控制。
  4. 编辑: 在第三种方法中,section / subsection表将有一个外键。如果不为null,则该外键标识父节。此结构可以表示任何宽度或深度的子部分树,并且文章可以与该树中的任何部分相关联。对于您概述的简单场景,这种类型的结构可能过度,但足够灵活,可以适应概念模型的某些扩展,而无需更改物理结构。