簡體   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