标签: physical-design

当限制为一对多时,在一对多对多桥接关系中强制执行唯一性

我们定义了一系列配置,其中,在 RESTful API 的驱动下,最终用户可以构建新的修订版本。配置的某些组件可以有多个值;修订涉及具有一对多关系的多个表。

因为配置被运往别处,修订被标记为已部署,并且变得不可变。如果用户想对配置进行更改,他们必须创建一个新修订(可以从现有修订中克隆)。每个配置的一个 修订版可以标记为“当前”;这允许用户随意在过去的修订之间切换,或者通过不选择任何修订来完全禁用配置。当前版本已部署,当将不同版本标记为“当前”时,您将替换已部署的配置。

我们已经准备好了一切来强制部署修订的不变性;当您第一次使用修订作为当前修订时,该deployed列会自动转换为TRUE,并且所有进一步的INSERT,UPDATEDELETE与修订相关表中部署的修订 ID 匹配的行的操作都将被阻止。

但是,用于公共名称表中的name列的任何值在所有当前配置的所有“当前”修订中都必须是唯一的。我正在尝试找出执行此操作的最佳策略。

如果这是从配置到公共名称的简单一对多关系,则可以通过对name列使用唯一约束来解决。相反,这是一种一对多模式,revision充当桥接表,并将current_revision_id一对多对多关系“折叠”为从配置到虚拟的一对多关系公共名称。

这是一组简化的表格,用于说明我们的情况:

-- Configurations
CREATE TABLE config (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    current_revision_id INT
);

-- Have multiple revisions
CREATE TABLE revision (
    id INT PRIMARY KEY,
    config_id INT NOT NULL REFERENCES config(id),
    created_at TIMESTAMP WITH TIME ZONE …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger physical-design unique-constraint

5
推荐指数
1
解决办法
155
查看次数

Hash Join 如何与除等式运算符以外的关系运算符一起使用?

我一直在阅读有关 Hash Join 以及它在物理层面上是如何工作的。但是,有些事情我不明白(因为我缺乏知识)。

这是我找到的Hash Join算法;

for each row R1 in the build table
    begin
        calculate hash value on R1 join key(s)
        insert R1 into the appropriate hash bucket
    end
for each row R2 in the probe table
    begin
        calculate hash value on R2 join key(s)
        for each row R1 in the corresponding hash bucket
            if R1 joins with R2
                return (R1, R2)
    end
Run Code Online (Sandbox Code Playgroud)

这对于诸如"TABLE1.NAME == TABLE2.NAME"等的连接条件似乎是足够的。但是,当连接条件为"TABLE1.NAME == TABLE2.NAME" && "TABLE1.AGE > TABLE2.AGE".

我只是无法找到并理解他们如何生成或比较需要相等运算符和其他一些关系运算符(例如大于等)的哈希值。

join physical-design hashing

3
推荐指数
1
解决办法
157
查看次数

存储 0 到 100 之间数值的列的最有效数据类型

在我的 MySQL 数据库上,我想使用TINYINT (Unsigned)?

你会Byte在 SQL Server 上使用吗?

mysql sql-server datatypes physical-design

3
推荐指数
1
解决办法
1116
查看次数

Usefulness of a multi-attribute index

If an index has more than one attribute in it, is there any speed gained in a select statement whose where clause uses one of the attributes in the index?

例如,拿一个T带有属性索引的表ab。索引是否对查询有用:

select * from T where a='foo'
Run Code Online (Sandbox Code Playgroud)

我问是因为我正在阅读的书有以下陈述,我无法理解:

如果多属性索引的键确实是按某种顺序连接的属性,那么我们甚至可以使用此索引在第一个属性中查找具有给定值的所有元组。

index physical-design

2
推荐指数
1
解决办法
3529
查看次数

char 或 smallint 用于带有数字代码的列?

我的应用程序中有列的值始终为 4 位数字,例如“0100”或“1230”。示例之一可能是Merchant Category Code

暂时,我已经将这个列的类型设置为char (4). 我有很多这种类型的专栏。这些类型的列之一也包含在非聚集UNIQUE索引中。我想为这种类型的专栏建立一种方法。

通过在应用程序中添加或 添加到开头来使用char (4)或可能更好吗?smallint' '0

包含这些列的表已分区,将包含大约 3 亿条记录。UPDATE可能不会在这种类型的列上执行。它们也不会出现在WHERE(有时可能出现在临时报告中)。

我应该选择哪种数据类型?

它就像一个邮政编码,它可以是数字,但你必须存储前导零

确切地。我在考虑在性能方面什么是更好的方法。还必须考虑到,如果我将其存储为smallint,应用程序代码必须将其解析为字符串并添加前导零。

sql-server datatypes physical-design sql-server-2019

0
推荐指数
1
解决办法
222
查看次数