我有一个"核心"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
您可以在部署后脚本中添加列,但不幸的是,您无法在项目中的其他位置引用这些列。因此,在我为项目的特定实例部署后的脚本中,我会检查表和列是否存在,如果列不存在,我会添加它。但是,脚本添加的列不会添加到数据模型中,供您通过另一个存储过程或视图在其他地方引用。
一个可能的解决方法是在核心项目中保持核心表的原样。在扩展项目中,创建一个表,将适当的外键和约束返回到核心表,以及其他列,实际上是1:1的关系。如果需要,可以使用VIEW虚拟化这两个表,其中包含核心列,以及扩展表中的附加列。
如果核心在所有实例中都是标准化的,那么您希望保持这种核心。将这些扩展视为责任分离规则的一部分。如果核心发生了变化,那么它应该只影响核心,如果扩展需要改变,那么只应该改变那些扩展。
这对于注释来说太长了。
如果我正确理解你的问题,你正在寻找类似于表继承的东西。这是Postgres支持的(请参阅此处的文档)。这似乎正是你所描述的。
如果是,则SQL Server不直接支持它。我的建议是拥有核心表,然后为每个应用程序拥有另一个表,该表对附加列具有相同的聚集索引。