首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将项目尺寸存储在表中的最佳方法?

将项目尺寸存储在表中的最佳方法?
EN

Stack Overflow用户
提问于 2013-12-04 16:46:14
回答 2查看 1.9K关注 0票数 0

我正在创建一个应用程序,用户将输入项目尺寸,如宽度、高度、深度和项目的重量。

代码语言:javascript
运行
AI代码解释
复制
public class ItemDimensions{

 public int width {get;set;}
 public int height {get;set;}
 public int depth {get;set;}
 public int weight {get;set;}

}

第一个问题是,在数据库中存储这些维度的最佳值类型应该是什么?int字符串双小数点..?

在用户界面上,用户可以选择输入详细信息的维度类型。例如,他们可能选择输入厘米或英寸。对于体重,他们可能选择进入公斤gr或石头等。处理这个问题最好的办法是什么?理想情况下,我只存储一个值,而不是为每个不同维度类型创建额外的列。

我自己的方法是创建一个dimensionType表,当用户选择维度时,让我们将宽度、高度和深度作为cm表示,它将保留外键、维度的类型,并存储数据。然后让我们说,如果用户想要查看它的英寸,它将检查数据的类型,并转换它。这是一种正确的方法来处理这些维度数据,还是有更好的方法来处理这些数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 17:27:29

通常经验法则是以标准化格式存储数据,无论是长度/宽度/高度/体重,还是日期/时间信息。如果您需要不同的单位或格式(或时区),在存储数据之前进行一些转换,以便您知道数据是可靠的、可用的格式。

度量由两个信息组成:一个值和一个单位说明符。如果希望用户在输入值时能够选择单位,则必须决定是否要将计量存储为原始值、单位格式或将输入的数据转换为标准化单位,并只存储转换后的值。

例如,假设我输入了一个长度值1.5 inch。您可以将值存储在两个字段中(例如LengthValueLengthUnit ),或者决定将值转换为标准单元(例如米),并将其存储在一个带有0.0381值的Length字段中。如果用户希望再次看到该值,您可以以米为单位给他,或者使用您的转换方法将其转换为她选择的单位。

数据的标准表示的优点是可以对数据提出简单的问题,例如:“有多少项的长度在150毫米至300毫米之间?”:

代码语言:javascript
运行
AI代码解释
复制
SELECT COUNT(*)
FROM Items
WHERE Length BETWEEN 0.150 AND 0.300

或者,体积小于1立方米的所有物品的平均重量如何?

代码语言:javascript
运行
AI代码解释
复制
SELECT AVG(Weight)
FROM Items
WHERE (Length * Width * Height) < 1

如果您想存储值,那么您需要一个转换表来问这些问题:

代码语言:javascript
运行
AI代码解释
复制
SELECT COUNT(*)
FROM
(
    SELECT i.LengthValue * c.Factor AS Length
    FROM Items i
    JOIN Conversion c ON c.FromUnit = i.LengthUnit
    WHERE i.ToUnit = 'm'
) l
WHERE Length BETWEEN 0.150 AND 0.300

更复杂的是:

代码语言:javascript
运行
AI代码解释
复制
SELECT AVG(WeightKg)
FROM
(
    SELECT i.LengthValue * lc.Factor AS LengthM,
        i.WidthValue * wc.Factor AS WidthM,
        i.HeightValue * hc.Factor AS HeightM,
        i.WeightValue * mc.Factor AS WeightKg
    FROM Items i
    JOIN Conversion lc ON lc.FromUnit = i.LengthUnit
    JOIN Conversion wc ON wc.FromUnit = i.WidthUnit
    JOIN Conversion hc ON hc.FromUnit = i.HeightUnit
    JOIN Conversion mc ON mc.FromUnit = i.WeightUnit -- 'm' for 'mass'
    WHERE lc.ToUnit = 'm' AND wc.ToUnit = 'm' AND hc.ToUnit = 'm' 
        AND mc.ToUnit = 'Kg'
) d
WHERE (LengthM * WidthM * HeightM) < 1

似乎是一个人为的例子,但我在生产中见过这样的代码。

这不仅是丑陋的代码,它是非常低效率。即使将单元说明符作为索引存储到单元表中或作为索引存储到转换表中,查询复杂性仍然太高。

这里的缺点是,如果允许数据库中的不同单元,则必须对每个使用这些值的查询执行这种操作。即使您知道数据库中的每个当前长度值都是在m中输入的,也不能保证总是这样。

票数 0
EN

Stack Overflow用户

发布于 2013-12-04 17:08:51

我会采取和你一样的方法。您可以将项目与其类型一起存储在主表中。您的模型对维度使用int,但也允许十进制值--在Server中存储它的最佳类型是decimal

你可以有主桌

代码语言:javascript
运行
AI代码解释
复制
Item table
--
... -- other fields
Width decimal(38,6) -- you can decide on precision
Height decimal(38,6) -- you can decide on precision
Depth decimal(38,6) -- you can decide on precision
DimentionTypeId int FK -- the 3 above would use the same dimention type?
Weight


DimentionType table
--
DimentionTypeID int PK
Description
... -- other fields

您可以在应用程序中使用DimentionType进行查找(例如,使用维度类型填充组合框)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389223

复制
相关文章
IDEA一个项目启动多个实例,以集群启动
在微服务开发场景下,服务大多是以集群方式部署的。在本地开发时 有时候会需要以集群的方式启动项目,同时启动多个实例来测试一些相关功能(例如分布式锁),此时不需要打包之后再仍到测试环境去启动多个实例,在IDE中就可以同时启动多个实例。
鱼找水需要时间
2023/02/16
2K0
IDEA一个项目启动多个实例,以集群启动
docker容器启动多个终端,docker启动多个终端
如果我们通过docker attach cd3b79a85d7e命令来开启两个终端启动,我们发现输入命令另一个终端也在同步输入很尴尬。
高久峰
2023/06/27
6440
实现一个启动多个jar或多个服务的脚本
在一开始,我选择了参考网上所说的定义一个rc.local文件,修改/etc/rc.local,但发现这种方法可以实现自启动脚本,但是通常只能启动一个服务,然后后面的服务就不能启动了。这个是因为自己做了实验发现的。
路行的亚洲
2021/08/20
4.5K0
多个Tomcat启动配置
修改Server 的端口8005 修改为任意的的端口,注意不能与别的Tomcat重复。
收心
2022/01/19
1.3K0
mysql启动多个实例
机器环境:CentOS Linux release 7.4.1708 (Core)
dogfei
2020/07/31
3.4K0
docker-compose一个应用启动多个节点
前言 我们知道以前使用docker的时候启动两个节点需要我们构建两个镜像,每个镜像都分别映射端口并启动镜像 非常的不方便,但我们用docker-compose就可以非常方便 的启动了 docker-compose.yml配置 version: "3" services: web: build: context: /home/chatAPI/ dockerfile: Dockerfile image: demo-web1:v1.0.0 restart
SuperChen
2023/02/13
2.1K0
SpringBoot同一个服务多个端口启动
设置完端口后点击下 空白处,否则有可能端口设置不上去 如果没有这个选项,则执行以下步骤即可看到:
星辰sea
2022/10/29
1.2K0
SpringBoot同一个服务多个端口启动
[C#] 控制台应用程序退出事件
在 .NET 中,是否有一种方法(例如事件)来检测控制台应用程序何时退出?你可能需要清理一些线程和 COM 对象.,记录一下信息等等。。。。。。。 比如我的数据采集软件,每次启动和退出时向钉钉推送相关
科控物联
2022/04/19
2.9K0
[C#] 控制台应用程序退出事件
Gin 框架:启动多个端口
请访问如下地址获取完整教程:https://rkdocs.netlify.app/cn
尹东勋
2021/12/01
1.6K0
Gin 框架:启动多个端口
idea启动多个tomcat失败
Intellij idea中,为在本地调试两个系统之间的调用,配置两个本地tomcat server,设置不同的端口号,如8081和8082,Deploy中加入两个系统各自的Artifact xxx:war, Application context设置为“/“,即访问地址分别为http://localhost:8081/ 和 http://localhost:8082/ 。 问题来了,分别单独启动两个server时都能成功;但是同时启动两个系统时,两个系统都会出现问题。其中较先启动的server报错为:St
欢醉
2018/01/22
2.6K0
adb shell 启动,停止 android 应用程序一、adb启动 应用程序二、adb停止 应用程序
包名和Activity类的类名一定要输入正确,可以用re-sign工具(在最后的弹出信息框会显示出包名和Activity类名)。
一个会写诗的程序员
2018/08/20
5.9K0
Linux启动多个Oracle实例
关键:操作每个数据库实例之前设置ORACLE_SID变量 export ORACLE_SID=数据库实例
小小工匠
2021/08/16
2.8K0
python启动应用程序和终止应用程序
每天上班,工作需要,电脑上需要每天开机启动一些软件,下班时候,需要关掉一些软件。一个一个打开和关闭貌似是很繁琐的,于是乎,这个脚本产生了。
py3study
2020/01/07
2.4K0
Echo 框架:启动多个端口
请访问如下地址获取完整教程:https://rkdocs.netlify.app/cn
尹东勋
2021/12/02
1.1K0
Echo 框架:启动多个端口
c语言中的system函数_c语言system的头文件
执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。
全栈程序员站长
2022/10/02
2.5K0
WinForm程序启动控制台窗口Console
本文转载:http://blog.csdn.net/oyi319/article/details/5753311
跟着阿笨一起玩NET
2018/09/19
2.5K0
WinForm程序启动控制台窗口Console
如何在 Windows 10上创建和运行批处理文件
在 Windows 10 上,批处理文件是一种特殊的文本文件,通常具有。Bat 扩展,它包含一个或多个命令,命令提示符可以理解并依次运行以执行各种操作。
披头
2020/12/15
28.8K0
如何在 Windows 10上创建和运行批处理文件
一个通用的java应用程序启动shell脚本
一个通用的java应用程序启动shell脚本 #!/bin/sh current_path=pwd case "uname" in Linux) bin_abs_path=$(readlink -f $(dirname $0)) ;; *) bin_abs_path=cd $(dirname $0); pwd ;; esac base=${bin_abs_path}/.. export LANG=en_US.UTF-8 export USER_C
用户1503405
2021/10/29
7040
SpringBoot中很好玩的一个banner启动控制台效果
先说一个网站:BootSchool 我就那”佛祖“为例: 复制好后,在你自己创建SpringBoot项目中找到resources文件: 创建banner.txt文件 banner.txt文件创建完后粘贴复制的banner即可 最后运行就能看到结果了 这个东西就图一乐,大家可以自己发挥
用户9006224
2022/12/21
7690
SpringBoot中很好玩的一个banner启动控制台效果
Windows 服务 同时启动多个服务
最近需要开发 Windows Service 程序,之前没有接触过,所以把了解到的一些东西记录下来。
独立观察员
2022/12/06
1.6K0
Windows 服务 同时启动多个服务

相似问题

ansible 2.4.2中的ansible switch用户

12

是否可以在ansible剧本中为私人回购代理添加ssh密钥?

11

使用ansible分发ssh密钥

17

在Git Windows中向SSH代理添加SSH密钥

13

在ansible playbook文件中指定ssh密钥

331
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文