Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库:在多重测量中保存“重量”和“高度”?_Mysql_Database_Database Design_Relational Database - Fatal编程技术网

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

我有一个应用程序,它可以在数据库中保存用户的身高和体重。我的桌子如下

单位类型-此表的值为
高度
重量

单位-此表保存具有相关测量值的
患者的相关
单位类型
。例如,
患者
id
1
可能更喜欢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谢谢你的回复。是的,我知道这是一种错误的方法,但要求用户应该能够这样保存。。如果他需要的话,今天是公斤级,明天是磅级。我知道这实际上也不会发生。如果用户要保存在一个单元中,我们需要转换和显示,那就好了,但这里不是这样。在这里,用户将保存不同的测量值!!在测量改变的情况下,我们不能全部转换,因为在多次转换后,数字精度会改变,而且太难了。你有什么建议?有其他选择吗?我通常会发现,严格按照“要求”行事是没有意义的,也不是一个好的顾问所期望的。不反对用户以不同的单位进行输入。当然,您可以存储这些不同的输入。但是谁说你不能把他们转换成一个正常的基本单位呢?顺便说一句:“也太难了”不是你真正的意思,是吗?