我目前正在收集有关平房价格的数据。我有大小,价格,位置,每个m2的价格和检索数据的日期(样本日期)。我计划创建包含这些数据的MySQL数据库,这就引出了有关适当模式的问题。
我有两个选择。
我不确定按这种方式划分表是否会给使用查询带来一些好处。我在假设日期比示例id消耗更多内存的假设下,只有两个表的优点,所以更少地消耗源。另一方面,我不相信我会有足够的数据来制作假想的日期列来影响结果。所以不确定这是否值得?
我想就这种情况和可能的办法征求意见。
编辑:我的目标是创建具有收集数据可视化的web应用程序。就像随着时间而改变平均价格一样,在观察到的地点平均价格也是一样。价格和尺寸的分布,并设想这一特征随时间的变化。
发布于 2020-08-13 10:47:20
因为每个平面都有多个样本,所以一个平面表(双关意)将导致在几行中有重复的数据,并且必须以某种方式保证这些列是同步的。你可能最终会在同一套公寓里有不同的尺寸在不同的行。这就是当你违反第一范式(1NF)时所发生的事情。另外,如果我们知道单位的唯一性是由ID决定的,那么就必须有一个带有ID和SAMPLE_DATE的复合PK。因此,为了避免这种设计,我建议:

您可以创建一个连接两个表的视图,以便查询该视图来创建报告,而不必每次都编写联接。
create or replace view v_flats as
select
f.flat_id,
f.address,
f.size,
s.sample_date,
s.price
from
flat f
left join sample s
on (f.flat_id = s.flat_id);发布于 2020-08-12 13:54:13
对于这两种方案中的任何一种,如果您想要同一平面的不同示例,那么将有多个具有相同FLAT_ID. 的行--本质上是您的主键将是(FLAT_ID,SAMPLE_DATE)。
关于第二个问题,我不知道SAMPLE_ID如何进一步解决这个问题,除非您期望第一个表的多行共享一个公共示例,并有一定的原因/意义。
您可以应用规范化和单独的关注点:
表1 .单位:
这些似乎是固定不变的东西,你不想重复一遍又一遍。
表2 .样本:
价格/M2是可计算的,所以不需要存储它。
https://softwareengineering.stackexchange.com/questions/414739
复制相似问题