2015-12-23 34 views
0

我有一個'Core'VS數據庫項目,其中包含一個名爲[dbo]。[MyTable]的表,其上有許多列。我在許多解決方案中重複使用這個項目,其中我還包含一個引用核心數據庫項目的特定於應用程序的數據庫項目,並將更多的表和FK從這些表中添加到核心項目的表中。擴展現有表的Sql數據庫項目

是否可以在覈心數據庫項目中定義的表上創建表,即向現有表中添加更多列,以便這些列僅針對一個特定於應用程序的數據庫項目定義,而不是任何其他人重用相同的核心數據庫項目?

編輯:我剛剛發現6年前發佈的相同的問題。顯然,當時的答案是'不',但也許它可能在更新版本的VS?

https://social.msdn.microsoft.com/Forums/en-US/3583a5ea-d653-4268-a1d0-f58788c0cebf/partial-project-add-extra-column-to-table?forum=vstsdb

+0

其實,它仍然是錯誤的問題。您正在將ER概念(如繼承與關係概念)混合在一起 - 這些是不同的東西。數據庫項目代表*關係*模型,而不是ER。 ER確實具有繼承性,實際類型和與屬性的關係。這些獲得*映射*到關係模型。 Visual Studio(或任何其他數據庫工具)中的數據庫項目不是數據庫的ER模型,而是最終結果。 –

+0

我不確定你想說什麼 - 你應該怎麼做? –

+1

可以使用ER建模工具提供繼承,並將它映射到關係模型或手動創建表。你所要求的只是對數據庫項目沒有意義。 –

回答

0

這是太長的評論。

如果我正確理解你的問題,你正在尋找像表繼承。這由Postgres支持(請參閱文檔here)。這似乎正是你所描述的。

如果是這樣,那麼SQL Server不直接支持它。我的建議是核心表,然後爲每個應用程序有另一個表具有相同的聚集索引爲額外的列。

+0

嗨,我不尋找在SQL Server中的表繼承支持,我在設計時尋找在Visual Studio數據庫項目中的繼承支持 - 其輸出將只是一個普通的表,但與在基礎項目加上在特定於應用程序的項目中添加的列 –

+0

嗨,您還可以解釋如何使用相同的聚集索引爲「擴展」表中的其他列添加配置嗎? –

+0

@SimonGreen你問的是錯誤的問題,混淆了關係和ER概念。 ER確實具有繼承性,但它以各種方式(每個表的類型,每個表層的表等)被映射*到最終的關係結構。 VS數據庫項目包含關係結構,而不是ER模型。 –

1

您可以在後期部署腳本中添加列,但不幸的是您無法在項目中的其他位置引用這些列。所以在我的項目特定實例的後期部署腳本中,我會檢查表和列的存在,如果列不存在,我會添加它。但是,腳本添加的列不會被添加到數據模型中,以供您通過另一個存儲過程或視圖引用其他位置。

可能的解決方法可能是在覈心項目中保留核心表原樣。在擴展項目中,創建一個表,並將適當的外鍵和約束返回到核心表以及附加列,實際上是1:1關係。如有必要,使用包含核心列的VIEW以及擴展表中的附加列虛擬化這兩個表。

如果核心在所有實例中都是標準化的,那麼您希望以這種方式保持核心。將這些擴展看作是責任分離規則的一部分。如果核心發生了變化,它應該隻影響核心,如果擴展需要改變,只有那些應該改變。

+0

是的,這就是我們已經決定要做的事情 - 基本上,我認爲我的問題的答案是(仍然)無法在引用其他數據庫項目的DB項目中擴展表格。因此,唯一可用的選項是通過部署後腳本進行擴展,或者定義一個擴展表,並將1:1映射到核心表(還可以通過組合2的視圖進行交互) –