如何使用元数据构造SQL表

韦德

因此,我是一名SQL noobie,我想组织一个结构化的数据库,其中包含SQLite中的元数据和数据。我不确定如何执行此操作,并且我在不同的互联网站点中四处查看,但没有发现任何有用的信息。

基本上,我想要的是这样的东西(以不同的数据收集站为例):

SQL表:

  • 位置
  • 年份
  • 有关车站的其他重要信息

然后以某种方式,当我查询该表并希望查看有关特定站点数据的信息时,我能够提取看起来像这样的数据:

datetime    data
1/1/1980    11.6985
1/2/1980    43.6431
1/3/1980    54.9089
1/4/1980    63.1225
1/5/1980    72.4399
1/6/1980    79.1363
1/7/1980    82.2778
1/8/1980    86.0785
1/9/1980    86.8612
1/10/1980   84.3342
1/11/1980   80.4646
1/12/1980   77.1508
1/13/1980   74.827
1/14/1980   73.387
1/15/1980   72.1774
1/16/1980   71.6423

由于我不太了解表层次结构,因此不知道如何执行此操作,但我认为这可能是可能的。任何帮助,将不胜感激!

迈克

使用不同的数据收集站

立即指示应使用单独的电台表,并且读数应与电台表相关/关联/参考。

对于台表,您可能会遇到以下问题:-

CREATE TABLE IF NOT EXISTS stations (id INTEGER PRIMARY KEY, station_name TEXT, station_latitude REAL, station_longitude REAL);

这将创建一个包含4列的表(如果尚不存在):

  • 第一列ID是将自动生成的唯一标识符,是您用来引用特定站点的标识符。
  • 第二列station_name用于表示站点名称,其类型为TEXT。
  • 第三列和第四列用于根据经纬度和经度的站点位置。

您可以使用:-添加几个电台

INSERT INTO stations (station_name, station_latitude,station_longitude) VALUES("Zebra", 100.7892, 60.789);
INSERT INTO stations (station_name, station_latitude,station_longitude) VALUES("Yankee", 200.2967, 95.234);

您可以使用以下命令显示/返回这些内容:

SELECT * FROM stations
  • 那就是从称为stations的表中选择所有列(*),结果将是:-

在此处输入图片说明

接下来,您可以创建读数表,例如:-

CREATE TABLE IF NOT EXISTS readings(recorded_datetime INTEGER DEFAULT (datetime('now')), data_recorded REAL, station_reference INTEGER);

这将创建一个名为读数的表(如果尚不存在),它将具有3列:-

  • 类型为INTEGER的recorded_datetime(最多可以存储8个字节的整数,即很大)。这将用于存储时间戳。尽管可能不是您想要的,但作为示例,如果未为此列指定任何值,将使用默认值,即当前日期时间。
  • data_recorded为用于数据的REAL。
  • station_reference这将引用站点的ID。

然后,您可以使用以下命令为Zebra站插入读数:

INSERT INTO readings (data_recorded,station_reference) VALUES(11.6985,1);

由于未提供record_datetime列,因此将使用当前日期时间。

如果:-

INSERT INTO readings VALUES(datetime('1980-01-01 10:40'),11.6985,1);

那么该读数将是1980年1月1日在1:10的位置。

使用:-

INSERT INTO readings VALUES(datetime('1980-01-01 10:40'),13.6985,2);
INSERT INTO readings VALUES(datetime('1966-03-01 10:40'),15.6985,2);
INSERT INTO readings VALUES(datetime('2000-01-01 10:40'),11.6985,2);

将为洋基站(id 2)添加一些读数。

使用SELECT station_reference, recorded_datetime, data_recorded FROM READINGS;将选择所有列,但是station_reference将是结果中的第一列,例如:

在此处输入图片说明

明显的进展是显示包括各个站的数据。为此,将使用JOIN。也就是说,读数表将与台站表合并,其中各个台站详细信息是根据与台站ID匹配的station_refrence值来确定的。

但是,假设我们希望站点信息类似于站点名称(Long = ????-纬度= ????)日期/时间数据,并根据站点名称和日期/时间进行排序。然后可以使用以下内容:

SELECT 
        stations.station_name ||
            '(Long='||station_longitude||' - Lat='||station_latitude||')' 
        AS stationinfo, 
        readings.recorded_datetime,
        readings.data_recorded 
FROM readings 
JOIN stations ON readings.station_reference = stations.id
ORDER BY stations.station_name ASC, readings.recorded_datetime
  • 请注意,这更多地显示了一个示例,您可以在SQL中完成相当复杂的事情,而不是期望完全理解编码。

这将导致:-

在此处输入图片说明


您可能会(或有些会)争论,但是为什么我不能只用一个表来显示读数,日期时间,站名,站纬度,站经度

好吧,你可以。但是:-

  • 假设有一个指令要更改工作站Zebra的名称,那么您将不得不遍历所有行以进行多次更改。易于编码,但在资源使用方面相对昂贵。使用两个表意味着只需要一次更新。
  • 对于每一行,您都必须复制数据,这很可能浪费磁盘空间,从而增加了访问数据所需的资源。也就是说Zebra至少要占用5个字节,Real则要占用8个字节(其中2个字节),因此是21个字节。引用一次重复的数据将占用最多8个字节的整数(最初只是一个字节)。因此,每次读取将花费13个字节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用SQL读取Dynamics导航表元数据

SQL Server-如何使用表构造函数定义查询

使用SQLAlchemy元数据reflect(),如何获取实际的表对象?

C#-如何显示有关从另一个表检索的sql表的元数据?

如何使select2元素与数据表和分页一起使用?

如何使用Powershell将具有元数据标题行的CSV文件转换为平面表?

如何使用cassandra中的元数据查询/日志查找是否正在读取表

如何获取SQL查询的元数据?

SQL 如何使用 INNER JOIN 从表中删除数据

如何使用GROUP BY从SQL的3个表中选择数据?

如何在switch语句中使用Sql表数据?

如何使用Oracle SQL汇总/数据透视表

如何使用SQL Server替换数据表中的名称

如何使用php从sql中的多个表中获取数据

如何使用R以摘要格式构造数据

我应该如何使用松散的关系来构造我的SQL数据库

如何使用来自 2 个表 SQL 查询的数据更改表中的数据

如何构造分成36个表的数据库模型?

如何构造数据库以避免表中重复

如何最好地构造MySQL表中的数据?

如何构造不是来自数据库表的Codeigniter“模型”

如何表示/构造Excel表数据以获取季度图?

如何使用AVFoundation获取图像元数据?

如何使用 JavaFX 设置元数据?

如何使用MATLAB提取图像元数据?

如何使用PIL保留JPEG元数据?

如何使用MUPDF获取PDF元数据

如何查看Microsoft Access 2013表的元数据?

sqlalchemy如何将元数据绑定到表