Database 变型计量单位存储的最佳实践&x27;s

Database 变型计量单位存储的最佳实践&x27;s,database,design-patterns,database-design,Database,Design Patterns,Database Design,我正在构建一个应用程序,该应用程序将存储大量关于人(体重、身高、血压等)的“标记”,由于用户对他们想要测量的度量单位有不同的期望,我需要以智能的方式处理计量单位。我想知道的是,对于如何最好地存储这些信息,是否有任何共识。我正在考虑的示例如下(在每种情况下,前端都假定捕获与捕获相关的标记和计量单位): 公制转换。转换为公制当量并存储原始计量单位,但仅存储公制计量单位(原始计量单位不会丢失,尽管转换过程中可能会出现一些十进制精度) 同时存储这两个。存储标记、捕获的计量单位,然后转换为公制并将其存储。

我正在构建一个应用程序,该应用程序将存储大量关于人(体重、身高、血压等)的“标记”,由于用户对他们想要测量的度量单位有不同的期望,我需要以智能的方式处理计量单位。我想知道的是,对于如何最好地存储这些信息,是否有任何共识。我正在考虑的示例如下(在每种情况下,前端都假定捕获与捕获相关的标记和计量单位):

  • 公制转换。转换为公制当量并存储原始计量单位,但仅存储公制计量单位(原始计量单位不会丢失,尽管转换过程中可能会出现一些十进制精度)
  • 同时存储这两个。存储标记、捕获的计量单位,然后转换为公制并将其存储。这使得对度量量的SQL查询变得简单,同时完美地保留了原始标记的精度,但显然存储更密集。我想插入的成本也会稍高一些,因为需要转换为度量(但我想这是无关紧要的)
    对我来说,精度损失不会很严重,除非它会带来不和谐的用户体验。想象一下,如果一个用户输入160磅,然后看到它返回159.99磅;这将非常令人不安,并将导致人们不相信该系统。我怀疑在大多数转换中,虽然我能够返回到相同的数字,但不需要太多地增加DB中的精度大小。不过,这种感觉只是我乐观的一面,而不是我测试过的东西。

    存储这两种感觉都不是个好主意。您必须确保这些值保持一致,并且它违反DRY()原则

    您混淆了存储和演示。如果您要存储重量,则应存储为一种表示形式,然后以用户要求的任何表示形式呈现(例如千克、吨、吨、克、石、磅、盎司等)


    您可以将单位与大小一起存储(例如,10千克、4石头等),但这会导致比较出现问题,例如,对于小于2盎司的实体的SQL查询必须执行转换。我认为在演示时执行计量单位转换是一个一致且直观的解决方案。

    好的,我喜欢这个答案,我以前的标准化培训也同意这个答案。当我在离开十年后重新开始编程时,我注意到越来越多的人接受甚至推动数据存储级别的去规范化,这导致我缺乏信心。我会等待其他人的更多评论,但我会接受你的答案,除非有令人信服的事情发生。好的,我接受这个答案@Brian。谢谢最后一件事,存储标记捕获的单元对于保持事务不丢失和可审核很重要,但这将存储在单独的字段中。那么SQL就没有问题了。也许我不明白你的SQL评论。我看到的唯一问题是,如果我存储原始计量单位和原始震级,而不是原始计量单位和转换震级。要使查询SQL保持简单,幅值字段必须是一致的单位。@ken-是。这就是我的意思。您可能不想让转换发生在SQLServer中,只需对您的最后一段进行简短的评论即可。您应该将值存储为浮点,以获得最高精度。这意味着您的示例将从kg转换为lbs,例如159.9999 lbs,当以{0.##}格式显示时,仍然显示为160。您肯定不希望使用固定点(例如decimal)作为数据库列类型。