2

我試圖找到一種基於與個人「事物」相關但也彼此相關的數據點來開發事物組的方法。構建組使用相關數據點

例如,假設我試圖對我在家中收到的垃圾郵件進行分組。當我收到這封信,我記錄:

  • 郵戳城市和國家
  • 的返回地址,街道,企業名稱,城市,州和郵編
  • 業務
  • 大小的電話號碼和信封
  • 打印信封時,使用的字體顏色

讓我們也說,隨着時間的推移,我看到了同樣的返回地址和/或電話號碼顯示不同的商業名稱。我可以推斷,所有這些信件可能都是由同一個企業發送的。我可以將地址,電話號碼和商家名稱作爲同一個「實體」。

或者,我看到完全不同的地址和電話號碼,但信封上的大小,顏色,郵戳和字體都是一樣的。我可以推斷(不太確定),這些也可能來自同一行業。

我正在尋找的是採用這種數據的最好方法,並根據重疊的數據將其分組爲「桶」(實體)......使用SQL Server,Analysis Services或其組合。 。這樣我就可以輸入一個單一的數據點來查看它是否與任何其他數據點相關(例如,輸入一個字母的電話號碼以查看實體或與其相關的一組字母)。

有人可以請指出我在正確的方向嗎?

在此先感謝!

回答

0

對於每個唱片我都會問,「這有多獨特?」然後開始基於邏輯分解...

狀態:具有潛在大量複製的低唯一數據集;創建一個帶有標識列的[State]表,並且如果可能的話,預填充所有可能的值以減少非聚集索引上的索引碎片。

Create Table [dbo].[State] (StateID Int Identity, StateName Varchar(32)) 
Create Unique Clustered Index ix_stateID On [dbo].[State] (StateID) 
Create Unique NonClustered Index ix_SN On [dbo].[State] (StateName) 

ZipCode:具有適當重複性的中等獨特數據集,但每個ZipCode都與單個狀態關聯。再次,預填充這個可能對於避免漸進式索引碎片很有用,但取決於您期望這種增長速度有多快,只需讓它填滿即可,並定期重新索引,這可能是有意義的。如果您只追蹤美國地址,並且只有前五位數字預先填充(如果您正在執行此操作,請將ZipCode列更改爲Int)。

Create Table [dbo].[ZipCode] (ZipCodeID Int Identity, StateID Int, ZipCode Varchar(16)) 
Create Unique Clustered Index ix_zipcodeID On [dbo].[ZipCode] (ZipCodeID) 
Create Unique NonClustered Index ix_stateID_ZC On [dbo].[ZipCode] (StateID, ZipCode) 

市:此表將有一個體面的大型數據集,但仍然有重複噸,所以我們會再次創造一個身份價值的機會,但是這一次我絕對不會預填充。

Create Table [dbo].[City] (CityID Int Identity, ZipCodeID Int, CityName Varchar(64)) 
Create Unique Clustered Index ix_cityID On [dbo].[City] (CityID) 
Create Unique NonClustered Index ix_zipcodeID_C On [dbo].[City] (ZipCodeID, City) 

的StreetAddress:這是選擇性的,因爲我們會得到與出地址,但我們仍然要創建一個ID列,因爲我們可以從同一地址接收郵件噸的。

Create Table [dbo].[StreetAddress] (StreetAddressID Int Identity, CityID Int, StreetAddress Varchar(256)) 
Create Unique Clustered Index ix_streetaddressID On [dbo].[StreetAddress] (StreetAddressID) 
Create Unique NonClustered Index ix_cityID_SA On [dbo].[StreetAddress] (CityID, StreetAddress) 

的電話號碼,我可能會打破它由[AREACODE]和[******中國]所以...

Create Table [dbo].[AreaCode] (AreaCodeID Int Identity, AreaCode Int) 
Create Unique Clustered Index ix_areacodeID On [dbo].[AreaCode] (AreaCodeID) 
Create Unique NonClustered Index ix_AC On [dbo].[AreaCode] (AreaCode) 

Create Table [dbo].[PhoneNumber] (PhoneNumberID Int Identity, AreaCodeID Int, PhoneNumber Int) 
Create Unique Clustered Index ix_phonenumberID On [dbo].[PhoneNumber] (PhoneNumberID) 
Create Unique NonClustered Index ix_acID_PN On [dbo].[PhoneNumber] (AreaCodeID, PhoneNumber) 

那麼對於剩下的我會創造一個深入查找表(尺碼,顏色,字體等)

Create Table [dbo].[Characteristic] (CharacteristicID Int Identity, Characteristic AppropriateDataType) 
Create Unique Clustered Index ix_characteristicID On [dbo].[Characteristic] (CharacteristicID) 
Create Unique NonClustered Index ix_abrevCharact On [dbo].[Characteristic] (Characteristic) 

後來終於有你最獨特的項目,您的郵件...

Create Table [dbo].[Letter] (LetterID Int Identity, Received DateTime, StreetAddressID Int, PhoneNumberID Int, CharacteristicIDs ...) 

根據您最常運行的查詢,找出[dbo]。[Letter]表上哪些索引是有意義的,高效的查詢應該像使用必要的連接和邏輯編寫適當的查詢一樣簡單。 :)

這是我的2美分。