數據庫表列注解的制作方法
【專利說明】
【背景技術】
[0001]數據庫(諸如關系數據庫)通常包括用于響應于查詢而被分析的表。例如,對于關系數據庫,通常使用關系模型形式上描述和組織數據項的表的集合。表可以包括列約束,諸如唯一鍵(unique key)、主鍵(primary key)或外鍵(foreign key)。例如,唯一鍵可以包括表中數據實體的一個或多個數據屬性。主鍵可以唯一指定表內的元組(tuple),因為,主鍵唯一地定義表的每一行的特性。外鍵是與另一個表的主鍵列相匹配的關系表中的字段。
【附圖說明】
[0002]本公開的特征在以下的(多個)圖中通過示例的方式來圖示,并且不局限于該(多個)圖中,其中相同的數字指示相同的要素,其中:
圖1圖示了根據本公開的示例的數據庫約束生成設備的架構;
圖2圖不了根據本公開的不例的商店表;
圖3圖示了根據本公開的示例的銷售額表;
圖4圖示了根據本公開的示例的供應項表;
圖5圖示了根據本公開的示例的在圖2的商店表和圖3的銷售額表之間的聯結(join)后的中間結果;
圖6圖示了根據本公開的示例的在圖2的商店表和圖4的供應表之間的聯結后的中間結果;
圖7圖示了根據本公開的示例的用于數據庫約束生成的方法;以及圖8圖示了根據本公開的示例的計算機系統。
【具體實施方式】
[0003]為了簡單和說明性的目的,通過主要參照示例來描述本公開。在以下描述中,闡述了眾多具體細節以便提供對本公開的透徹理解。然而,將顯而易見的是,可以在不限于這些具體細節的情況下實踐本公開。在其他實例中,尚未詳細描述的一些方法和結構以免不必要地使本公開晦澀。
[0004]遍及本公開,術語“一”和“一個”意在表示特定要素中的至少一個。如本文所使用的,術語“包括”意指包括但不限于,術語“包括了”意指包括了但不限于。術語“基于”意指至少部分地基于。
[0005]對于通常包括用于響應于查詢而被分析的表的數據庫(諸如關系數據庫),關于表列約束的信息(例如唯一鍵、主鍵和外鍵)通常對于優化查詢性能而言是需要的。當這樣的表被填充時,添加表列約束可能是繁重的。因此,表生成者(例如,用戶)可能避免在數據庫設計期間使用這種表列約束,或者無法將現有約束作為部分輸入數據導出到數據庫。如果有意或者無意地省略這樣的表列約束,則確定對于查詢性能方面降低的確切原因以及通過添加表列約束來對該情況進一步補救可能是具有挑戰性且耗時的。
[0006]根據一個示例,在本文中公開了一種數據庫約束生成設備以及一種用于數據庫約束生成的方法。本文所公開的裝置和方法可以推斷出表注釋,其在下文稱為“軟唯一(soft-unique)約束”。本文所公開的設備和方法還可以使用該推斷結果來指導數據庫中的查詢規劃,從而顯著提高查詢性能。
[0007]根據一個示例,該數據庫約束生成設備可包括存儲器,其存儲用以進行下述操作的機器可讀指令:接收與數據庫中的表有關的數據,分析所述數據以確定針對所述表的列的行計數,以及分析所述數據以確定針對所述表的列的不同值數目。所述存儲器還可以存儲用以進行下述操作的機器可讀指令:通過將所述行計數和所述不同值數目進行比較來確定比較值,以及確定所述比較值是否在閾值內。如果比較值在閾值內,則可以將注釋添加到所述表的列,以在對所述列的數據插入或更新時限制所述列的唯一屬性的實施。所述數據庫約束生成設備可以包括用以實現所述機器可讀指令的處理器。
[0008]根據另一示例,用于數據庫約束生成的方法可以包括:接收與數據庫中表有關的數據,分析所述數據以確定針對所述表的列的行計數,以及分析所述數據以確定針對所述表的列的不同值數目。可以通過將所述行計數與所述不同值數目進行比較來確定比較值。所述方法還包括確定所述比較值是否在閾值內。如果所述比較值在閾值內,則可以將注釋添加到所述表的列,使得在涉及所述表的基數估計過程期間將所述列看作是唯一的。
[0009]圖1圖示了根據一個示例的數據庫約束生成設備100的架構。參照圖1,設備100被描繪為包括數據庫分析模塊101,其用以從例如與表103(即表1-N)有關的數據庫102接收數據。行計數確定模塊104可以分析表103,以確定針對每個表103的行計數。不同值數目確定模塊105可以分析表103,以確定針對每個表103的每一列的不同值數目。替換地,行計數確定模塊104和不同值數目確定模塊105可以對數據庫102的表103和/或所選的列執行相應的分析。行計數和不同值數目比較模塊106可以通過將針對來自表103的一個表的特定列的行計數和不同值數目進行比較來確定針對該特定列的數據是否是唯一的。注釋添加模塊107可以從行計數和不同值數目比較模塊106接收比較數據,并且確定接收到的比較數據是否在閾值108內。這樣,注釋添加模塊107可以確定從行計數確定模塊104接收到的行計數是否在從不同值數目確定模塊105接收到的不同值數目的預定閾值百分比內(即閾值108內)。此外,可以基于與行計數和不同值數目之間的百分比差(例如,5%的差)有關的用戶輸入來配置閾值108。如果接收到的比較數據在閾值108內,則注釋添加模塊107可以添加表注釋109,其在下文被稱為對適當列(S卩,下述列:在該列處行計數與所估計的不同值數目近似匹配(即在閾值108之內))的軟唯一約束。
[0010]模塊101和104-107以及設備100的執行設備100中各種其他功能的其他組件,可以包括存儲在非臨時性計算機可讀介質上的機器可讀指令。此外,或替代地,模塊101和104-107,以及設備100的其他組件可以包括硬件或機器可讀指令與硬件的組合。
[0011]參照圖1-3,圖2和3分別圖不了根據本公開的不例的商店表120和銷售額表140。在數據庫(諸如數據庫102)中,聯結可被用于過濾數據。例如,參照商店表120和銷售額表140,按季度得出針對馬塞諸塞州(MA)中所有商店的平均銷售額可能涉及到在針對馬塞諸塞州商店的過濾的情況下的商店表120和銷售額表140之間的聯結。對于這樣的查詢,夕卜鍵-主鍵(FK-PK)約束可能是查詢優化器用來估計基數(S卩,聯結結果的基數)的屬性。針對商店表120和銷售額表140的基數基于針對這些表的行數分別為5和7。對于存儲表120,主鍵為ID列,其包括唯一的ID 1-5。此外,對于銷售額表140,外鍵是商店ID (store_ID)列,其引用商店表120的ID列。
[0012]FK-PK聯結可以被指定為多對一(m-1)聯結,不管所涉及的PK-表的大小如何,其基數不高于所涉及的FK-定義的表的基數。例如,對于存儲表120和銷售額表140,馬薩諸塞州的銷售記錄數量不能高于銷售記錄的總數。在沒有對聯結列的約束的情況下,該聯結可以變為多對多(m-m)聯結,其基數可以高達兩個所涉及的表的笛卡爾乘積(S卩,行的乘積)。m-1聯結的基數估計一般被看作比m-m聯結的基數估計更準確。對于將成為m_l聯結的聯結,該表需要在聯結列上是唯一的(例如,商店表120)。然而,表的列不需要被定義為主鍵,或者其他表的列不需要被定義為外鍵。
[0013]再次參照圖1-3和5,圖5圖示了根據本公開的示例的在完成由列“名稱(Name)”和“州(State)”所分組的“合計(價格)”之前,在商店表120和銷售額表140之間的聯結后的中間結果。為