1

当我进行查询时,我经常想知道这一点:

将额外的字段添加到表中更好,还是只获取值并使用服务器端语言进行计算?

例如,表 Student 包含 Student.score 字段。我想考成绩。

我得到分数并为成绩做一堆 if/else/switch 吗?

我是否会通过添加一个字段来存储依赖于另一个字段的内容来浪费空间?

每次你需要成绩时,前者很烦人。当我想到空间使用时,后者让我害怕。如果我只有 10,000 条记录,那么我已经浪费了 10,000 个字段!

考虑到重要的表和大中型数据库,哪种方法最有效?

如果重要,让我们使用 PHP 作为服务器端语言。

4

3 回答 3

2

您的数据持久层通常不应存储经常更改的计算值。这样做会产生风险,即允许停滞数据在数据存储中持久存在,然后影响业务层,进而影响其他一切。

一般来说,您总是希望在运行时生成计算值。

但是,在确定解决任何设计问题的最佳方法时,我不会担心数据库中的单个附加字段。硬盘空间既便宜又充足。:-)

于 2008-11-02T02:31:51.103 回答
2

您的数据库比您认为的要强大得多。

这在很大程度上取决于您的数据库类型和版本,但您可以使用一些过程和函数来提高脚本的效率。与现有的多行解决方案服务器端语言相比,这些方法可以是简单的快速调用。为什么不制定一个程序——当被调用时——返回所有学生的信息以及它为你计算的字母等级?为什么不使用一些数学函数来找出两个字段之间的差异?为什么不使用 datetime 函数来格式化您的日期字段?

您可以通过多种方式使用数据库来处理信息。这仅取决于您期望数据库的大小。如果它只是一个简单的 5 页 CMS 网站,那么,不,您可能不希望在数据库方面完成太多工作,但是,如果您有一个包含多个相互关联的大容量表的大型数据库那么,是的,您可能希望将一些处理转移到数据库中。

于 2008-11-02T02:38:28.533 回答
1

添加额外字段时,您还需要考虑每当更新它所依赖的字段时,也需要更新额外字段。是否可以将计算移到 SQL 中,而不是遍历记录集并在服务器端代码中执行?

于 2008-11-02T02:33:22.020 回答