Mysql 数据库:在多重测量中保存“重量”和“高度”?
我有一个应用程序,它可以在数据库中保存用户的身高和体重。我的桌子如下 单位类型-此表的值为Mysql 数据库:在多重测量中保存“重量”和“高度”?,mysql,database,database-design,relational-database,Mysql,Database,Database Design,Relational Database,我有一个应用程序,它可以在数据库中保存用户的身高和体重。我的桌子如下 单位类型-此表的值为高度,重量 单位-此表保存具有相关测量值的患者的相关单位类型。例如,患者id1可能更喜欢kg测量体重,而cm测量身高。在这种情况下,units表中的行如下所示 idunits - 1 patient_idpatient - 1 unit_type_idunit_type - 1 unit_measurement - kg idunits - 1 patient_idpatient - 1 unit_ty
高度
,重量
单位-此表保存具有相关测量值的患者的相关单位类型
。例如,患者
id1
可能更喜欢kg测量体重,而cm测量身高。在这种情况下,units
表中的行如下所示
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 1
unit_measurement - kg
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 2
unit_measurement - cm
idpatient - 1
height - 230
weight - 70
height_unit - cm
weight_unit - kg
idmeasurements - 1
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 2
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 3
idpatient - 1
weight - 72
weight_measurement - kg
idpatient_weight
idpatient
weight
measurement
我没有将单位
映射到任何表,而是运行搜索查询来查找用户首选的测量值,并在其他表中插入数据
例如,patient
表包含patinet
sfixed身高和体重,这是一次性输入(一名患者只有一条记录)。因此,如果我在这个表中添加一行,它将如下所示
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 1
unit_measurement - kg
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 2
unit_measurement - cm
idpatient - 1
height - 230
weight - 70
height_unit - cm
weight_unit - kg
idmeasurements - 1
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 2
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 3
idpatient - 1
weight - 72
weight_measurement - kg
idpatient_weight
idpatient
weight
measurement
例如,测量
表用于患者每月的身高
和体重
读数。这将包含来自同一患者的多个记录。这将如下所示
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 1
unit_measurement - kg
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 2
unit_measurement - cm
idpatient - 1
height - 230
weight - 70
height_unit - cm
weight_unit - kg
idmeasurements - 1
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 2
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 3
idpatient - 1
weight - 72
weight_measurement - kg
idpatient_weight
idpatient
weight
measurement
到目前为止,这一方针是顺利的,但我们面临着挑战。我们被告知在所有测量中都应同时保存身高
和体重
。例如,如果用户将其体重保存为kg,则其体重也应保存为lb。如果他将自己的身高
保存为厘米,则也应将其保存为英寸。这是因为现在用户可以将其身高
和体重
保存在其首选测量值(ex:kg)中,将测量值更改为其他可用测量值(ex:lb),并在转换所有以前的测量值时保存另一条记录,而不会失去任何精度。他可以上下任意次数地执行此操作,精度不会改变,我们也不需要每次从代码中转换和更新他在DB中的所有值
我的问题是,我如何促进这一点?我能想到的唯一方法有两种
为所有相关表中的每个测量类型创建字段。因此,在患者
表中,将现有列替换为身高厘米
,身高英寸
,体重千克
,体重磅
。这同样适用于测量
表。这可能适用于此场景,但不确定是否是最佳实践。有1000种测量体重/身高的方法(好吧,这是纯粹的想象…),然后呢
为每种测量类型创建新表。例如,我可以创建patient\u weight
和patient\u height
表,并从patient
表中删除height
、height\u unit
、weight\u unit
字段
我的患者体重
表如下所示
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 1
unit_measurement - kg
idunits - 1
patient_idpatient - 1
unit_type_idunit_type - 2
unit_measurement - cm
idpatient - 1
height - 230
weight - 70
height_unit - cm
weight_unit - kg
idmeasurements - 1
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 2
idpatient - 1
weight - 70
weight_measurement - kg
idmeasurements - 3
idpatient - 1
weight - 72
weight_measurement - kg
idpatient_weight
idpatient
weight
measurement
因此,我可以插入任意数量的测量值,将同一记录转换为任意数量的测量值。下面是一个例子
idpatient_weight - 1
idpatient - 1
weight - 70
measurement - kg
idpatient_weight - 2
idpatient - 1
weight - 154.32
measurement - lb
你有什么建议和建议?完全错误的方法。数据不应以不同的单位并行保存,这会产生冗余数据,并可能导致不一致。相反,您应该只保存一种类型,并在需要时计算其余的类型。最好是在内部总是用国际单位制保存。哦,要小心,因为这是一个常见的恼怒原因:有不同类型的特定单位,例如磅:在美国,一磅是450克(AFAIK),世界其他地方使用更合理的磅,达到500克。所以你的单位也要精确!关于单位间转换的另一个提示是:你应该使用一个库来实现这一点,而不是对所有非定域的东西进行编码。我在几年前就实现了类似的功能。它目前只提供长度和面积,但也准备提供权重之间的转换,所以您可能有兴趣扩展它。这样一个库的优点是,它更加健壮,并且保持代码可读性和易于理解。这是我当时的实现:@arkascha谢谢你的回复。是的,我知道这是一种错误的方法,但要求用户应该能够这样保存。。如果他需要的话,今天是公斤级,明天是磅级。我知道这实际上也不会发生。如果用户要保存在一个单元中,我们需要转换和显示,那就好了,但这里不是这样。在这里,用户将保存不同的测量值!!在测量改变的情况下,我们不能全部转换,因为在多次转换后,数字精度会改变,而且太难了。你有什么建议?有其他选择吗?我通常会发现,严格按照“要求”行事是没有意义的,也不是一个好的顾问所期望的。不反对用户以不同的单位进行输入。当然,您可以存储这些不同的输入。但是谁说你不能把他们转换成一个正常的基本单位呢?顺便说一句:“也太难了”不是你真正的意思,是吗?