sql - SQL 命名列
问题描述
我正在为我的学校项目创建一个表,在其中一个表中,我存储了有关平板电脑的不同规格,在定义这些设备的 CPU 和 RAM 时,您还需要指定测量单位。那么我可以为 CPU 设置一个列名,比如 CPU_Ghz ???? 还是 RAM_GB ???
我这样说是因为我可能想对这些值执行一些查询,而且我知道我可以执行特殊查询来仅提取数字,以防我保存这种格式“4432mah”的信息(我认为不是非常好),但是由于我是从头开始做数据库的,所以可能会像我上面提到的那样保存它??CPU_Ghz ???? 还是 RAM_GB ???电池_mAh??
感谢您的帮助祝您有美好的一天!
解决方案
是的,您最好将单位包含在列名中而不是数据中。通过这种方式,您可以将数据存储为数字,这比将其存储为表示值和单位的字符串具有许多优点:
- 每列只存储一个值,这满足 1NF 规则。
- 数据库可以强制值的正确性。您只能在正确的范围内存储正确类型的数字。
- 所有查询都简单得多。
- 您可以通过查看列名来判断测量单位。
- 您告诉数据库用户该列的值是一个特定的单位 - 如果您存储了一个字符串,频率可能已存储为 1Ghz 或 1000Khz,您必须分析单位以获得正确的值。
- 您可以使用 SUM、AVG 等聚合函数(感谢 Damien!)
推荐阅读
- spring-boot - Heroku Spring Boot 应用程序启动问题
- vuetify.js - 将 Vuetify 1.5 数据表升级到 2.0:自定义列、行方式和行内点击事件
- c++ - unique_ptr 与原始指针的不同行为
- xamarin - Xamarin - 如何创建一个布局,在所有设备上调整其大小,同时保持其比例
- python - SQL Server Python 内部错误:应该有标签
- winapi - MFC:从 CDialog 更改为 CWnd 现在 CStatusBar 不显示?
- c# - Windows Forms Move Borderless Window
- typescript - 为什么 Typescript 不检查值数字枚举?
- c# - 返回的时间戳值没有文档来描述该值所代表的内容
- azure - Azure ARM 模板:将 NSG 或路由表添加到动态 vnet/子网模板