在为Web应用程序设计关系数据库架构时,经常会遇到一种情况,最终我创建了一个表,仅包含一行和一行。感觉那是设计它的错误方法,但是我无法提出任何明显更好的方法,或者那显然是“正确的方法”。
最近的示例是一个站点,该站点使用户可以手动控制主页上的内容。好吧,只有一个主页。我创建了一个表,其中包含构建主页的所有必要字段,例如包含描述性文本的区域的文本字段。一个用于存储大图像文件名称的字段。一些外键指向将在首页上显示的文章,等等。它虽然有效,但是只有一行的表感觉不对。
过去,我尝试了许多其他设计,例如允许主页表中包含多行并随机选择一个。我尝试添加一个名为“ active”的布尔字段,并随机选择一个活动主页。在应用程序逻辑中,我尝试在任何给定时间仅强制一行处于活动状态。我什至尝试不制作主页表,也不让所有其他项(例如文章)具有名称为featured_on_homepage之类的布尔字段。
在大多数情况下,我可以在设置文件中使用一堆常量来构建主页。设置文件的主要问题在于它在开发人员的控制之下。因为像主页内容这样的东西是用户要编辑的东西,所以它必须进入数据库。
在许多站点上,我没有这个问题,因为我可以通过查询来构建诸如首页之类的内容,例如选择五篇最新文章。但是,当我有严格要求的手动页面时,在数据库中对其建模就变得很棘手。但是想象一下,您有一张照片桌子和一张物品桌子。要求是首页要显示精确的五张照片,精确的三篇文章和两块由用户手动控制的任意文本。您如何在数据库中正确建模呢?
另外,除了首页以外,我在许多其他情况下都遇到了建模问题。这只是我能想到的最简单,最适用的示例。