复合项目 - 处理额外的列
Composite Projects - handling additional columns
从此post.....
http://blogs.msdn.com/b/ssdt/archive/2012/06/26/composite-projects-and-schema-compare.aspx
...似乎(相同)数据库引用是一种共享数据库公共部分的方法。
如果特定数据库需要来自(相同)数据库引用的 table 上的额外列,有什么方法可以处理吗?
我希望您可以通过在引用数据库项目中重新声明 table 来覆盖数据库引用中 table 的定义。
例如如果您在 Common Database 项目中有一个 Employee table,则在引用 Common Database 的客户端数据库中对 Employee table 的定义将覆盖 Common 项目中的定义。相反,当您去部署项目时,您会收到错误...
SQL71508: 该模型已有同名元素 dbo.Employee。
编辑:
考虑到下面的反馈,我做出的决定是不对现有客户端数据库使用数据库引用。相反,我创建了一个结构如下....
+OurCompanyDatabases
+Common
Common.sqlproj
+dbo...
+ClientA
+dbo....
+ClientB
+dbo....
ClientA.sqlproj
ClientB.sqlproj
所以我在同一个文件夹中有多个 sqlproj 文件,我根据需要从项目中包含和排除文件。
例如,ClientA 的 Sales table 添加了一个 ClientARewardsID 列 我排除了 /OurCompanyDatabases/Common/dbo 文件夹中的 Sales table 并在/OurCompanyDatabases/ClientA/dbo 个文件夹。
这样,客户端 A 和客户端 B 可以保留对 SSDT 更新和部署的充分利用,同时最大限度地减少 sql 脚本的重复。我希望这会降低网站的维护成本。
今后我将使用数据库引用,并且将在新的 table 中添加额外的列,这些列具有与 Common table.[=12= 的外 1:1 外键关系]
为额外的列添加一个新的 table 并使其主键成为它扩展的 table 的外键是更安全和更好的做法。
不,它不支持继承类型模型,您只能真正共享完整的对象,因此在您的情况下,您可以将其结构化为:
- proj a - TableA
- 参考资料 - 项目共享
- 项目 b - 表 A
- 参考资料 - 项目共享
- 项目共享 - TableXYZ
那么您可以有两个不同的 TableA 定义,但仍然共享所有相同的对象。
还有另一种选择,您不能在 SSDT 中包含 table 定义或包含一个或另一个,然后在 post 部署脚本中自行处理任何更改和部署并使用我的过滤器( http://agilesqlclub.codeplex.com/) 停止 ssdt 部署对您的 table 的任何更改,但这种方式使使用 ssdt 的主要原因之一无效(免费合并类型部署)。
编辑
从此post.....
http://blogs.msdn.com/b/ssdt/archive/2012/06/26/composite-projects-and-schema-compare.aspx
...似乎(相同)数据库引用是一种共享数据库公共部分的方法。
如果特定数据库需要来自(相同)数据库引用的 table 上的额外列,有什么方法可以处理吗?
我希望您可以通过在引用数据库项目中重新声明 table 来覆盖数据库引用中 table 的定义。
例如如果您在 Common Database 项目中有一个 Employee table,则在引用 Common Database 的客户端数据库中对 Employee table 的定义将覆盖 Common 项目中的定义。相反,当您去部署项目时,您会收到错误...
SQL71508: 该模型已有同名元素 dbo.Employee。
编辑:
考虑到下面的反馈,我做出的决定是不对现有客户端数据库使用数据库引用。相反,我创建了一个结构如下....
+OurCompanyDatabases
+Common
Common.sqlproj
+dbo...
+ClientA
+dbo....
+ClientB
+dbo....
ClientA.sqlproj
ClientB.sqlproj
所以我在同一个文件夹中有多个 sqlproj 文件,我根据需要从项目中包含和排除文件。
例如,ClientA 的 Sales table 添加了一个 ClientARewardsID 列 我排除了 /OurCompanyDatabases/Common/dbo 文件夹中的 Sales table 并在/OurCompanyDatabases/ClientA/dbo 个文件夹。
这样,客户端 A 和客户端 B 可以保留对 SSDT 更新和部署的充分利用,同时最大限度地减少 sql 脚本的重复。我希望这会降低网站的维护成本。
今后我将使用数据库引用,并且将在新的 table 中添加额外的列,这些列具有与 Common table.[=12= 的外 1:1 外键关系]
为额外的列添加一个新的 table 并使其主键成为它扩展的 table 的外键是更安全和更好的做法。
不,它不支持继承类型模型,您只能真正共享完整的对象,因此在您的情况下,您可以将其结构化为:
- proj a - TableA
- 参考资料 - 项目共享
- 项目 b - 表 A
- 参考资料 - 项目共享
- 项目共享 - TableXYZ
那么您可以有两个不同的 TableA 定义,但仍然共享所有相同的对象。
还有另一种选择,您不能在 SSDT 中包含 table 定义或包含一个或另一个,然后在 post 部署脚本中自行处理任何更改和部署并使用我的过滤器( http://agilesqlclub.codeplex.com/) 停止 ssdt 部署对您的 table 的任何更改,但这种方式使使用 ssdt 的主要原因之一无效(免费合并类型部署)。
编辑