MSDN声明在使用依赖关系(外键)的基础上是正确的。该订单视为
- 子表(级联删除)
- 父表:插入和/或更新和/或删除记录意味着级联删除的最后一步。
- 子表:插入或更新。
由于我们谈论级联删除,我们必须保证通过删除父级记录,在删除父级记录之前,需要删除与父级相关的任何子级记录。如果我们没有孩子记录,那么在儿童级别没有删除。就这样。
另一方面,你可能以不同的方式接近你的情况。我认为现实生活(几乎)情景会更有帮助。假设父表是订单的主要部分(orderID,clientID等),而子表是详细信息部分(detailID,orderID,productOrServiceID等)。所以,你会得到一个订单,则有以下
父表
orderID = 1 (auto increment)
...
子表
detailID = 1 (auto increment)
orderID = 1
productOrServiceID = 342
and
detailID = 2
orderID = 1
productOrServiceID = 169
and
detailID = 3
orderID = 1
productOrServiceID = 307
因此,我们有三个产品/服务的一个订单。现在您的客户希望您将第二个产品或服务转移到新的订单,并在稍后交付。你有两个选择来做到这一点。
第一个(直接)
因此,您将有
父表
orderID = 1 (auto increment)
...
and
orderID = 2
...
子表
detailID = 1 (auto increment)
orderID = 1
productOrServiceID = 342
and
detailID = 2
orderID = 2
productOrServiceID = 169
and
detailID = 3
orderID = 1
productOrServiceID = 307
第二个(间接)
结果插入子表上的不停的DataRow你将有
父表
orderID = 1 (auto increment)
...
and
orderID = 2
...
子表
detailID = 1 (auto increment)
orderID = 1
productOrServiceID = 342
and
detailID = 3
orderID = 1
productOrServiceID = 307
and
detailID = 4
orderID = 2
productOrServiceID = 169
的原因第二选项,这是通过的方式,优选一个用于许多应用中,是给每个父记录细节id的原始序列。我已经看到了通过重新创建所有细节记录来扩展第二个选项的例子。我认为找到与这种情况相关的开源解决方案并检查实现是非常容易的。
最后,我的个人建议是避免使用数据集来做这种事情,除非您的应用程序是单用户。数据库可以通过事务以线程安全的方式轻松处理这个“问题”。
这是MS SQL服务器?或者我错过了标签。有趣的问题+1 – cctan 2012-03-21 09:54:26
这是SqlServer 2008,但我认为它是漂亮的DBMS独立! – 2012-03-21 10:01:15
我认为改变父母的孩子是一种不寻常的情况。 – 2012-03-21 10:25:07