扩展现有表

时间:2015-12-23 13:54:15

标签: sql-server ssms database-project dacpac

我有一个' Core' VS数据库项目,包括一个名为[dbo]。[MyTable]的表,上面有许多列。我在许多解决方案中重用了这个项目,其中我还包括一个引用核心数据库项目的特定于应用程序的数据库项目,并将这些表中的更多表和FK添加到核心项目中的表中。

是否有可能建立在'在核心数据库项目中定义的表,即向现有表添加更多列,以便仅为一个特定于应用程序的数据库项目定义这些列,而不是为重用相同核心数据库项目的任何其他列定义这些列?

编辑:我刚刚发现了6年前发布的同一个问题。显然,那时答案是“没有”,但也许在较新版本的VS中有可能吗?

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

2 个答案:

答案 0 :(得分:1)

您可以在部署后的脚本中添加列,但不幸的是,您无法在项目的其他位置引用这些列。因此,在我的项目特定实例的部署后脚本中,我会检查表和列的存在,如果列不存在,我会添加它。但是,通过脚本添加的列不会添加到数据模型中,以供您通过其他存储过程或视图在其他位置引用。

可能的解决方法可能是在核心项目中保留核心表。在扩展项目中创建一个表,使用适当的外键和约束返回核心表,以及附加列,实际上是1:1的关系。如果需要,使用VIEW虚拟化两个表,其中包含核心列以及扩展表中的其他列。

如果核心在所有实例中都是标准化的,那么您希望以这种方式保留核心。将这些扩展视为责任分离规则的一部分。如果核心发生变化,它应该只影响核心,如果扩展需要改变,只有那些应该改变。

答案 1 :(得分:0)

评论太长了。

如果我理解你的问题,你正在寻找像表继承这样的东西。 Postgres支持此功能(请参阅文档here)。它似乎正是你所描述的。

如果是这样,那么SQL Server不直接支持它。我的建议是拥有核心表,然后为每个应用程序提供另一个具有相同聚簇索引的表,用于其他列。