设计数据库结构时需要把前端需要的数据存入数据库吗?

2018-08-05 12:49:15 +08:00
 cingular
抱歉 标题可能有些拗口,文科生自学的编程,举个例子来说:

比如我写一个爬京东商品价格的程序,在设计数据库的时候建 2 个表:
表 1 是商品属性(包括名称、分类、URL...),表 2 是价格属性(根据商品 id 对应的今日价格,以及下次变化的价格和时间),
这样问题出来了,前端其实是需要找到表 2 中的某一商品价格的最低点及今日价,我想问的就是这个价格最低点一般是记录在数据表中还是前端调用的时候用再公式计算出来?

1.记录在数据表中:
这样每次抓取的时候同时需要更新最低价格这列数据,好处是前端可以直接引用值;
2.随时计算:
特点差不多与 1 相反;

纠结一天了,多谢!
3950 次点击
所在节点    MySQL
9 条回复
MangozZ
2018-08-05 12:56:09 +08:00
那要先考虑一个场景。

有没有比如查这个星期的最低价?最近 10 天的最低价? 最近季度的最低价?

还是说单纯的固定查询 比如全历史最低价 和 每日最低价?

这么说你不纠结了吧。。

ps.不要相信产品说的话。
cingular
2018-08-05 13:05:22 +08:00
@MangozZ 谢谢,您的建议是只记录最基本的数据值,其他能通过计算得出的都不记录是吗,
我其实很想知道专业的程序员们在设计数据库结构时候是怎么规划的,普遍是 1 还是 2,或者分情况 1、2 都有
GoodRainChen
2018-08-05 13:09:18 +08:00
@cingular 操作数据库的开销比较大,数据表更是不适合朝令夕改,所以一般只存一些比较固定的数据。
那些需要计算的临时数据,如果有性能瓶颈,可以做缓存。极少会有需要存到数据库的情况。
luob
2018-08-05 13:15:00 +08:00
直接 SELECT MIN(price)不行吗
MangozZ
2018-08-05 13:28:53 +08:00
@cingular 设计的时候 还是按照 2.随时计算 来设计。 因为筛选范围不固定,不可能记录的下各种情况。

如果有我所说的固定查询,全历史最低价 和 每日最低价 等非常容易命中的范围, 则放在另一张的新建表。 以后可以随时抛弃该冗余表。

ps.放我 mysql 一马吧。
iannil
2018-08-05 13:30:51 +08:00
1. 本着尽可能精简的原则设计,也就是能不存就不存。
2. 根据产品需求、运营需要、商务策略、客户要求、技术复杂度等各种因素,综合评估确认需要冗余,再冗余。并且此时依然要考虑 1 里的描述。在效率和复杂度上把握平衡。

有些情况冗余字段的效果很好,有些则没多大意义。

例如简单的数学计算,递增递减,在每次数据变化时提前计算好结果放到冗余字段里,就比取出来一个再一个个算要合算。当然,也可以不冗余字段,客户端或前端显示时计算。但这样又会把业务逻辑放到前台,带来更新上的效率问题。

又例如每次计算冗余结果时,本身就要对数据库进行查询,当数据稍微多一些或关联多一些,性能就会急速下降,这种就不合适冗余字段来处理,可以上缓存。如果确定冗余时查询的内容复杂度不会变多,比如固定 200 条或 300 条,更改架构添加缓存较为复杂,那又可以冗余字段来处理。

总之,这是很依赖实际情况的,项目不同,技术选型不同,人也不同,做的选择和倾向性也会不同。
个人观点,供参考。

@cingular #2
cingular
2018-08-05 13:50:09 +08:00
明白了,感谢各位!
lihongjie0209
2018-08-05 14:42:05 +08:00
前端页面改版难不成你也要跟着改???
BQsummer
2018-08-05 15:53:02 +08:00
1,2 情况都有,1 情况相当于缓存,特别是改动不大、统计比较费时费资源情况下,选 1。你举得这个例子完全没必要去存,实时计算很方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX