簡體   English   中英

擁有一個僅引用父表中的列的表是否值得

[英]Is It Worthwhile To Have a Table That Only References Columns From Parent Table

我目前有一個交易卡數據庫,主表是 AllCards。 該表有 20 列,超過數百萬行,但我的問題是關於 AllCards 中 boolean 類型 isSold 的列。 每當用戶加載我們的網站時,都會執行諸如“select someColumns from AllCards where isSold = False”類的查詢,以顯示所有可用的卡片。 但是,我想知道是否有一個單獨的表標記為 historical 和 current 不查詢數百萬行會更好。 我的后端代碼會將尚未售出的卡片放置在 Current 中,一旦售出,刪除 Current 中的該行並將該行移至 Historic。

Table Historic
Uid INT,
HCardID INT,
FOREIGN KEY Uid REFERENCES User(id),
FOREIGN KEY HCardID REFERENCES AllCards(cardID)

Table Current
Uid INT,
CCardID INT,
FOREIGN KEY Uid REFERENCES User(id),
FOREIGN KEY CCardID REFERENCES AllCards(cardID)

如上所示,Historic 包含已售出的 AllCards 的 ID,Current 包含尚未售出的 AllCards 的 ID。 因此,當用戶加載我們的網站時,我可以只對表 Current 執行連接查詢並迭代表 AllCards,其中 CardID = CCardID,而不必查詢表 All Events 的所有行並檢查它是否已售出。 這是一種有效的性能和組織方法,還是我應該忘記它,只有一個 AllCards 表並使用 isSold 列? 在同一主題上,我還實現了一個表 Week,該表包含本周從用戶那里購買的所有卡片。 對於這張表,我也做了以下方法

Table Week
Uid INT,
WCardID INT,
FOREIGN KEY Uid REFERENCES User(id),
FOREIGN KEY WCardID REFERENCES AllCards(cardID)

這樣,我不必查詢數百萬行來查找用戶本周購買的卡片,而是可以從 Table Week 和 AllCards 進行連接,其中 cardID = WCardID 和 Uid = Uid。 這對績效和組織有幫助嗎?這種方法是否值得? 或者我應該通過 AllCards 中的行執行 go 並進行查詢以獲取用戶本周購買的卡片的相同數據?

周表不應該存在。 相反,在 AllCards 中有一個日期時間並對其進行索引。

在 Current 和 AllCards 之間來回 go 可能比簡單地掃描整個 AllCards 更慢。 歷史同上。 反正兩者都相當於大表上有一對索引。 我假設有一些專欄將“當前”實體與 AllCards 中的“歷史”條目區分開來?

如果每次交易時都再次出現相同的“卡片”,那么您可能需要一張卡片表(帶有與“卡片”相關的列)和一張交易表(帶有與交易相關的列。交易可能有 UId 和 CCardId列和 TradeDate,但 Cards 不會TradeDate肯定會被索引,因此您可以高效地獲取一周的交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM