2013-05-06 51 views
1

我創建的SQL Server 2008R2一些企業主查找表。我需要保留特定於某個域的表格。例如,性別將是一張桌子,而城市可能是另一張桌子。在每張表格中,我保留開始日期和結束日期以保留歷史記錄版本查找表

現在我被要求這些版本,所以你會知道像V1了這些代碼和V2有這些更新的代碼。考慮一個查詢表是非常簡單的。例如,使用Gender可以有Gender表,GenderVersion表和GenderToGenderVersion連接表。這將需要每個查找2個額外的表。只需幾桌是可控的,但我希望能得到一個想法更好的方法有許多查找表

一些要求做到這一點。

  • 如前所述,查找表必須是特定的域。我不能結合 他們。
  • 初中級的程序員必須能夠建立一個選擇 聲明基礎上找到一個特定版本的所有的外觀值。

任何想法?我討厭擁有3x所需桌子的想法。

[編輯] 其他細節

我們需要能夠準確地確定哪些代碼是在一個特定的版本。 我們需要未經編輯或從以前版本中刪除的代碼才能成爲下一個版本的一部分。 我們會在代碼中保留開始日期和結束日期。版本標籤除了開始日期和結束日期之外。

下面是使用賽示例模型。這與

RaceVersion表

  • RaceVersionID
  • VersionLabel
  • 起始日期
  • 結束日期

RaceToRaceVersion

  • RaceID
  • RaceVersionID

賽表

  • RaceID(只是用於主代碼DB)
  • RaceCode(用於使用這些代碼所有其他系統)
  • RaceDescription
  • 起始日期
  • 結束日期

兩個密碼和版本獲取日期搜索的生效日期。 你可以找到一個版本,然後與代碼相關

每當代碼出現變化,在這種情況下,可以添加一個新版本,然後查找所有當前有效的行並填充鏈接表。

這適用於幾組代碼。我希望像這樣的功能可以更好地擴展。

+0

這是數據倉庫中的常見情況;您可能需要查看[緩慢變化的維度](http://en.wikipedia.org/wiki/Slowly_changing_dimension),瞭解處理這些版本的不同方法。 – Pondlife 2013-05-06 22:48:48

+0

我有幾個想法,但方法真的取決於*爲什麼*你需要這樣做。在這裏,如果我需要知道版本1中的哪些性別,我會從版本控制中檢出標記爲「v1.0」的表格「Gender」。 – 2013-05-06 22:59:32

+0

Pondlife - 我的「代碼」表是第二類SCD的。 (請參閱我在帖子中編輯的編輯)這是我採取的初始方法,通常應該是所需的一切。然而,委員會決定他們絕對需要在日期特定類型2 SCD之上的版本標籤。 – user2356282 2013-05-06 23:34:57

回答

0

我想到的第一件事是所有這些表中的versionId字段和描述每個versionId含義的版本表。相同數量的表格,每個表格中有更多的記錄。

編輯從這裏開始

那突然出現在我的腦袋也添加的applicationID和表格的第二件事。這樣,並非所有的應用程序都必須在同一版本上。

1

如果向每個查找表中添加version列,則可以避免使用多個表。每次輸入新版本的數據時,都會增加版本。從查找中選擇數據時,您必須始終指定正確的版本。

id | version | name 
--------------------------------- 
1 |  1 | Lookup Name for V1 
1 |  2 | Lookup Name for V2 

SELECT name 
FROM lookup 
WHERE id = 1 
    AND version = 2 

如果你想輕鬆地選擇最新的版本,你需要創建一個視圖:

SELECT id, name 
FROM lookup lu 
WHERE version = (
    SELECT MAX(version) 
    FROM lookup lu2 
    WHERE lu.id = lu2.id 
) 

然而,這種觀點將有可能超過保持更多的成本性能成本詳細選擇包含每次版本的語句。

+0

感謝您的評論。但是,這種方法對我不起作用。假設我有5行數據都是V1。然後添加一條新線以製作6條總線,現在將其視爲V2。 V2由所有新編輯和任何保留的以前的行組成。我們需要確定V1和V2是什麼。所以這個方法需要爲維護的所有內容添加新的行。這不是我們想要做的事情。 – user2356282 2013-05-06 23:13:02

+0

@ user2356282,所以你是說你將版本視爲所有查找數據的快照,而不僅僅是一行?或者更具體地說,您設想的版本的全部範圍是什麼?單個版本是否僅與行相關,僅與特定的查找表或數據庫中的整個查詢表集相關? – imthepitts 2013-05-07 00:35:24