项目之间的共享数据..创建一个共享数据库?

时间:2017-12-07 18:10:30

标签: mysql sql sql-server database database-design

我有三个项目,所有三个项目都有一些共享的信息。例如,假设一张车辆表(基本信息:年份,品牌,型号)和车主表(再次基本信息:姓名,地址,年龄)。三个项目需要能够访问车辆和车主信息。为单个访问点创建单独的数据库(总共2个表)与为三个项目(总共6个表)的每个相应数据库创建车辆和所有者表的优缺点是什么?这是最好的做法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

最佳做法是将所有相关数据放在一个数据库中。除非通过触发器等复杂方法,否则无法跨数据库强制实施引用完整性。在数据库中,您可以轻松使用外键来强制引用完整性。

自2005年以来的最佳做法是强制执行用户/模式分离,因此不要将所有内容放入[dbo],每个对象都有相关的模式。对象的这种分类使得在单个数据库中拥有数千个表或过程变得切合实际。

在现代数据库(如SQL 2005及更高版本)中,无需跨数据库分隔对象。您拥有文件组,分区,用户/模式分离等工具,可以让您轻松地在一个数据库中工作,并且效率更高。

作为一个示例,为什么使用单个数据库并按模式隔离对象是一种首选方法,请考虑应用程序的可移植性。在您希望将代码从开发移动到测试再到qa然后生成的情况下,或者在您希望将代码从客户端移动到客户的情况下,如果您的代码中嵌入了数据库名称,则这变得很困难。

也许您有月度销售报表,会计用于获取汇总。如果它在同一个数据库中,则销售报告被称为[]。[],您可以从[_dev]移动到[_prod]并且调用是相同的。如果您使用的是不同的数据库,则对销售报告的调用为[sales]。[dbo]。[get_monthly_report](例如)。现在,要移动到具有不同名称的不同数据库集,您需要位于完全独立的实例上,数据库设置完全相同。在某些情况下,例如当您将代码移动到客户端站点时,这可能非常困难。

将所有代码放在一个数据库中允许您在调用表,视图,过程等时不使用数据库名称,并且您的代码更加便携和灵活。