2009-11-24 65 views
1

我有一個基於Web的跟蹤應用程序,我將數據存儲在SQL服務器中。我正在跟蹤我已部署應用程序的位置。 Web界面是一個下拉組合,我現在有一個varchar(100)字段。我有用戶選擇下拉列表:如何在數據庫字段中存儲區域

  • 全球
  • 美國
  • 歐洲
  • 亞洲

,但現在我已經存儲在一個以上地區的申請(但不必然全球)

我應該擺脫「全球」的選擇,只是有一個多選的領域與美國,歐洲和A SIA。

我想嘗試的意義的,當我去查詢這個數據,我想切片和切塊這些數據並運行查詢,讓每區指標等

什麼是對我最好的方式存儲這些數據?

回答

4

如果你的數據在現實生活中是多對多的,那麼我建議有一個位置表,一個應用程序表和一個連接表。沒有理由,這會阻止你運行任何你想要的數據查詢。

-3

如果區域的數量很小(你只有三個在這裏),你可以使用一個TINYINT存儲值:

美國= 128, 歐洲= 64, 亞洲= 32

如果您使用C#,你也可以建立一個枚舉來存儲這些值

[Flags] 
public enum Region: byte 
{ 
    America = 128, 
    Europe = 64, 
    Asia = 32, 
    Global = 224 
} 

,做位操作對他們說:

bool isInAmerica = (myValue & Region.America) == Region.America; 

我想你也可以在SQL Server中按位操作。

+3

甜神沒有!!!!!!除非您絕對需要速度/存儲空間,否則不應該考慮在數據庫中執行此操作。 – tster 2009-11-24 04:03:13

+1

其他表格也是我的第一本能,我想大多數人會這樣說,但是他只有三個區域在這裏,並沒有提到增加額外的區域,這讓我想到提出另一種選擇。考慮我受到懲罰。 – expedient 2009-11-24 04:07:59

1

你不說哪個版本的SQL Server。你有沒有考慮將你的廣泛地區映射到實際的地理區域?這樣你就可以使用spatial features of SQL Server 2008,如果你在稍後定義位置的用戶上添加更多細節,你的數據庫和查詢將會更好。

+0

您實際上需要每個區域的多邊形才能工作。雄心勃勃,*方式*矯枉過正 – 2009-11-24 04:04:43

4

聽起來像一個標準的多對多的事情。像:

+-------+ +-----------------+ +--------+ 
| App | | App_Region  | | Region | 
+-------+ +-----------------+ +--------+ 
| id PK |<--| app_id PK FK | ->| id PK | 
| name | | region_id PK FK |/ | name | 
+-------+ +-----------------+ +--------+ 

App_Region那裏充當鏈接表,因此您可以將每個應用程序鏈接到多個區域。

1

我會考慮創建一個region表來持有全球,美洲,歐洲,亞洲(以及任何未來的區域),然後創建region_application,以便您可以將應用程序鏈接到多個區域。由於所有內容都是基於索引的,因此您的查詢應該運行良好,並且您可以輕鬆地按區域對它們進行切片。

0

我不會詳細介紹UI,但是在切片和切塊時,這應該有所幫助。



appdeploy_model_01

相關問題