我如何决定是否将评级属性表示为 table 或条目中的列?

How do I decide whether to represent rating attributes as columns in a table or entries?

我正在为我办公室的管理系统编写一个小程序来跟踪某些 parties/offices 的工作,我知道他们将根据四个属性进行评分,我们称它们为 A、B、 C、D.

虽然这个项目的规模并不重要,但这对我来说是一个思想问题。我将如何在以下两种解决方案之间做出选择?

第一个解决方案:(这是我想做的) 因为我知道属性的数量,并且每周都会为每个办公室填写所有属性,所以我想我可以创建一个 table 的评级,其中包含办公室 ID 列、date/id 检查每个属性都有四列。

第二种解决方案: 使用 office id 和 inspection/date id 为评级创建 table 并添加两列,一列用于评级类型,另一列用于评级值。 除此之外,我将有一个 table 和一个评级类型列表(代码作为主键),我正在考虑一个带有评级等级的列,这将导致另一个 table 称为 ratingScales其中将有一个评级等级列表(一列)和可能的值(第二列)。我觉得这让事情变得过于复杂,但请记住,这是我想到的一个更大规模的项目,而不是我正在做的事情。我在想,这样我就可以为每个评级属性设置不同的尺度,例如一个可以有值 yes/no,另一个可以有 1-4,另一个可以有低、中、高。所以我可以在原始 table 中的评级值中使用绑定值(我会使用评级属性的外键来获取该属性的比例,然后是可能值的列表)...

所以我在想怎么去决定。如果您不想为每个评级属性添加或将来添加,第二个解决方案似乎更容易,但我再次认为添加列不会太麻烦......除非 table 会太大...

有没有什么思路可以考虑或者其他的?

第一个解是非规范化解,第二个是规范化解。每个都有它的价值。

例如,如果您有一个气象站,该气象站的仪器每小时跟踪不同地点的温度、湿度、风速、风向和气压,那么第一种解决方案就相当合理。更改指标是一件大事——您必须在现实世界中的多个位置更改设备。很可能所有测量值都可用,或者根本 none。事实上,值 "belong together" 作为对每个位置天气的描述。

在另一个极端,您可能有不同的小组去办公室对不同的事物进行评级——健康检查员、财务检查员等等。这些不相关,所以基础数据不属于同一行。

一般来说,遇到这样的问题,你会希望选择灵活性。第二种解决方案在两个重要方面提供了灵活性:

  • 您可以毫不费力地添加新的评分。
  • 您可以更轻松地为评分添加新属性,例如特定 date/time 或评分者。

一般的答案是使用更规范化的形式。但根据具体情况可能会有例外。