繁体   English   中英

将ID与扩展名并置,以使与一个实体相关的多个行保持在单个列族中

[英]Concatenating ids with extension to keep multiple rows related to an entity in a single Column Family

我通过按位操作(如下所述)连接两个Integer ID,以创建一个long型的主键。 我想知道这是否是一个好习惯。 通过将不同的扩展名附加到entityId,这将有助于我将一个实体的多个行保留在一个列族中。 有更好的方法吗? 我的ID的类型为Integer(4个字节)。

public static final long makeCompositeKey(int entityId, int extension){
    return (long)entityId << 32 | extension;
}

大多数数据库都具有内置的自动创建ID的方式,您的应用无需关心它。 我对Postgres最熟悉,我在其中为每个表创建一个序列并将其用于@Id列,但是我知道Oracle和MSSQL具有完成同一件事的自己的方式。

但是,通常,数据库中的每一列都应存储一条信息。 根据您的建议,获取两条信息并将它们连接在一起会违反“根据书本知识”进行的“正确”数据库设计。 我的意思是:只有在您有非常非常好的理由这样做时,您才应该这样做(即使那样,您在进行实际操作之前也应该考虑两三遍。)这样做的原因,那就不要这样做。

这不是一个好的设计。 它应该是具有复合约束的两个不同的列。 您可以使用另一个生成的唯一ID作为主键。

除了主键之外,如果大多数查询将基于这两个值进行过滤,则还可以在两列上创建复合索引以加快查询速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM