1

在这种情况下,我应该将我的数据库一分为二吗?

设想

当客户在Order表中创建、编辑、保存订单时,网站所有者调用存储过程来更改表中的表属性Email

更新

Order 表与 Email 表的唯一关系是 userId (FK on Email 表)。那么,如果在客户下订单时,我会同时在电子邮件表中添加一个可以为空的“CcAddressId”列,这会产生什么后果。此订单成功后会出现问题吗?

问题:

  • 如果这些事件同时发生,是否会产生潜在的错误?
  • 将数据库分成组会更好吗?
4

1 回答 1

2

简短的回答是不要将数据库一分为二,因为您将失去外键强制执行的引用完整性,更不用说其他人在上面提出的其他问题了。您需要做的是查明当您将数据插入 Orders 表时,SQL Server 是否会为您的 EMails 表发出任何类型的锁定。您可以以此为起点进行实验并自己找出答案:

http://aboutsqlserver.com/2012/04/05/locking-in-microsoft-sql-server-part-13-schema-locks/

更改表将尝试发出与任何其他类型的锁不兼容的模式修改锁 (SCH-M)。因此,如果在被更改的表上发生任何活动(我假设这将是因为正在验证外键约束),您的模式修改语句将被阻塞很长时间。

这就是为什么最好在数据库负载不重时运行模式更改语句的原因。

于 2012-11-16T19:28:39.480 回答