使用一组 4 列将一行标识为唯一的(一个是外键,其他三个是浮点数据类型)是一种好的做法(或者它会不会有任何不利影响)?我正在尝试构建一个表(链接 4 个键)将描述表中的唯一条目。我很好奇这是否是一个好的攻击计划,或者是否有更好的方法。
出于视觉目的,请绘制下表。我们有如下表组织的库存项目:([K]是主键的象征,线条是关系)
Sheet_Class Sheet_Type Sheet_Size
=========== ========== ==========
[K] Sheet_Class-. [K] Sheet_Type--. [K] Sheet_Size
'---- Sheet_Class '---- Sheet_Type
Length
Width
Thickness
Run Code Online (Sandbox Code Playgroud)
数据可能以下列方式呈现,但为简洁起见,我排除了引入链接列的可能性:
Sheet_Class Sheet_Type Sheet_Size (Tables)
[Sheet_Class] [Sheet_Type] [Length], [Width], [Thickness] (Column Values)
============= ============ ==============================
Aluminum
5052-H32
48, 96, 0.032
48, 96, 0.040
48, 96, 0.063
6061-T6
60, 120,0.032
60, 120,0.040
60, 120,0.063
Steel
1018-CRS
48, 96, 0.018
48, 96, 0.023
48, 96, 0.031
Run Code Online (Sandbox Code Playgroud)
就目前情况而言(并且我已经在上面的“架构”中显示),我对Sheet_Size表中的条目使用了一个简单的(自动递增)整数主键。但是,我想知道使用Sheet_Type、Length、Width和 …
我无法理解 PostgreSQL 中模式的概念和用法。我不知道它如何影响我的数据库设计。我为什么要使用它?
如果我决定现在不考虑它们,以后再担心它们,这会影响我将来吗?
用一个例子解释会很好。
我已经升级到 MySQL 5.5 版。在那里,我在模式列表中观察到了 performance_schema。
我对一个免费且简单的 MySQL 工具感兴趣,它可以在创建数据库通用模式时提供在线协作功能。你知道任何?
我的公司在能源行业,我需要想出一个好方法来表示测量单位的转换。我已经做了一些搜索,但还没有找到一篇很好的文章,在我需要的深度上涵盖了这一点。大多数关于单位转换的信息都假设给定单元 1 有一个已知的(硬编码)转换率可以到达单元 2,这是简单的数学运算(这是我发现的最复杂的例子,但仍然无济于事)。然而,这在现实世界中并不总是正确的,对于我们必须处理的事情当然也不是这样。(抱歉写了这么长的文章——我正在尝试提供尽可能多的信息!)
棘手的示例 1: 某些转换会随时间变化,例如将 5 美元转换为欧元,反之亦然。这听起来似乎与能源无关,但它确实与能源商品市场有关(想想股票市场)。
棘手的例子 2:( 过度简化)一些天然气比其他天然气燃烧得更热。此外,天然气可以基于气体中的能量(例如Therms)或基于所述气体的体积(例如1000 立方英尺的MCF)来测量/存储,还有其他可能性(例如作为吨用于质谱)。汽油的一个类比是 1 加仑 87 辛烷无铅提供的能量比 1 加仑 93 辛烷无铅提供的能量少。
棘手的例子 3: 除了这些计量单位之外,我们还经常需要处理费率,例如$ per Therm或€ per MCF。因此,我们需要一些方法来与这些利率和如何将它们与基本单位工作,所以如果我们需要从转换$每千卡至每MCF€,我们可以和它们使用同样的发布速率转换从千卡至MCF。
棘手的例子 4: 以前,我非常松散地使用术语能源,有时可能是错误的。从现在开始,这种情况正在发生变化。所以最后一个曲线球是我们同时处理Energy和Power。对于电力,这意味着千瓦时与千瓦(尽管是雅虎问答,但这是一个相当好的解释)。数据类比:这就像比较下载的总MB数据与您的Mbps您的 ISP 为您提供的带宽。与数据一样,能源需要时间才能交付。继续进行数据类比,我们可能需要计算一段时间内消耗的平均有效带宽,因此假设在 1 …
多个测试床生成各种复杂性的测量数据。
在最基本的形式中,不考虑任何元数据,测试台上的一次测量将是一个小的(1 - 几千个样本)时间序列,每个样本有几十个通道/信号/属性。
跨时间和测试台的测量将具有一组相似的信号,但并不总是与为测试设置添加和移除传感器相同。
目前我们估计我们的数据速率为 6 testbeds x 4 test per hour x 12 hours a day x 4000 samples per test == 1,152,000 samples per day x 365 == 420,480,000 samples per year
_ x 48 columns per sample (currently 32 bit floats, mostly) ~~~ 75 GB per year
(本例中的列指的是通道/信号)
如果/当添加更多测试平台时,数据量可能会相应增加。
测试台在本地生成数据,然后将数据异步导入数据库。(可能在一秒钟内生成几千个样本,然后在本地进行审查,然后进行刮擦或导入。)
我们希望查询主要针对单个测量的聚合。即,您希望找到所有测量值(每个测量值都有 4k 个样本),例如 channel_output_voltage 的平均值在某个范围内。
为此设置表格的好方法是什么?必须考虑哪些因素?
从理论上讲,每次测量我可以使用一张桌子,每年生成 100,000 张桌子,但这对我来说并不是一个好主意。
或者我可以将所有内容都放在一个大表中(有数百列),该表为所有通道留出空间,并根据需要添加通道:每个样本一行。未使用的通道保持 NULL。
MEASUREMENTS
------------
measurement_id } PK
time_stamp }
channel_1 (may be …Run Code Online (Sandbox Code Playgroud) 我正在阅读 Oreilly 的PostgreSQL: Up and Running,并且在使用模式组织数据库部分中,它说search_path可以在数据库级别设置:
例如,如果我们希望 contrib 中的所有对象都可以在没有模式限定的情况下访问,我们将更改我们的数据库,如下所示:
ALTER DATABASE mydb SET search_path="$user",public,contrib;
但是,在键入上面的命令后,我仍然无法在public不限定它们的情况下引用其他模式中的表:
ALTER DATABASE auth SET search_path="$user",public,staging;`
\d users
Run Code Online (Sandbox Code Playgroud)
给出:
Did not find any relation named "users".
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用\d staging.users,它会起作用。
SHOW search_path;
Run Code Online (Sandbox Code Playgroud)
给出:
search_path
----------------
"$user",public
Run Code Online (Sandbox Code Playgroud)
是否默认search_path从postgresql.conf覆盖每个数据库的设置值与ALTER DATABASE ... SET search_path?如果是这样,每个数据库的值有什么用?
我试图在可搜索性和速度之间取得很好的平衡。我正在尝试不同的方法。
选项 1:将数组序列化为 JSON/PHP 序列化数组并将其存储在“元”列中。
id | name | meta
1 Bob {"city":"GoTown","birthdate":"1980\/8\/14","cat":"Felix"}
2 Alice {"city":"Streamville","birthdate":"1986\/6\/6","dog":"Rex"}
Run Code Online (Sandbox Code Playgroud)
选项 2:将键和值一起存储在堆栈中。
user_id | key | value
1 name Bob
1 city GoTown
1 birthdate 1980/8/14
1 cat Felix
2 name Alice
2 city Streamville
2 birthdate 1986/6/6
2 dog Rex
Run Code Online (Sandbox Code Playgroud)
选项 3:3 个表:实体、键、值。每个键名只存储一次。
user_id | name
1 Bob
2 Alice
key_id | keyname
1 city
2 birthdate
3 cat
4 dog
user_id | key_id | value
1 1 GoTown
1 2 1980/8/14
1 …Run Code Online (Sandbox Code Playgroud) 我想存储发票数据,如人员地址。但问题是地址会随着时间的推移而改变——例如,有人会搬出去改变他的地址。存储此类数据的问题出现了,因为我们无法更改某些发票上引用的数据。
我有 3 个表:(AddressInfo包含 StreetAddress 等),Person它们与AddressInfo, 和Invoice表具有一对多关系。
我有两个解决方案,但我不确定哪个方向是正确的方法:
创建AddressInfo并使其可软删除,添加一些类似的列IsActive,IsDeleted以便我的Invoice表可以通过其 ID 引用此地址信息,并且保证保持不变,除非有人在不使用我的应用程序的情况下直接更改此数据。
因此,当有人更改他的地址时,我会软删除(也许应该称为软更新?)当前地址并添加新地址,而根本不会触及旧记录。最好先检查一下发票上是否引用了它以防止污染。
我的Invoice桌子看起来有点像:
| InvoiceId | AddressInfoId |
将所需的列添加AddressInfo到我的Invoice表中。每次创建新发票时,我都必须复制数据,地址不会经常更改,重复记录会稍微污染我的数据库。
我的Invoice表看起来有点像(大大简化):
| InvoiceId | StreetAddress |
您是否有使用解决此特定问题的数据库(可能是某些 ERP 软件)的经验?
有趣的朗读:
我想将所有表从架构移动xyz到默认架构public。
我可以移动单个表
ALTER TABLE table_name
SET SCHEMA public;
Run Code Online (Sandbox Code Playgroud)
我可以得到所有的桌子
SELECT table_name FROM information_schema.tables WHERE table_schema='xyz'
Run Code Online (Sandbox Code Playgroud)
有没有办法将这两者结合在一起?
schema ×10
postgresql ×3
sql-server ×3
mysql ×2
alter-table ×1
oracle ×1
performance ×1
scalability ×1
tools ×1