考虑两个表A
和B
,如下所示(让我为丑陋的 ASCII 表道歉):
---------------------------------- ------------------------
| SNID | PNID | SerialNumber | | PNID | PartNumber |
|--------|--------|--------------| |--------|-------------|
| 0 | 0 | 17823 | | 0 | 9874-4362 |
|--------|--------|--------------| |--------|-------------|
| 1 | 0 | 17824 | | 1 | 1053-1409 |
|--------|--------|--------------| ------------------------
| 2 | 1 | 97245 |
----------------------------------
我想让位置 α 的服务器能够对 具有特定权限PNID 0
,并使位置 β 的服务器能够对 具有特定访问权限PNID 1
,但由于它是相同类型的数据(只是不同的所有者),我不认为数据本身应该是分开的。
无论如何,我想确定如果 β 想要访问为 分配一个序列号PNID 0
,它必须首先与 α 通信,然后才能这样做。这意味着如果它们之间的网络出现故障,α 可以生产PNID 0
但不能生产PNID 1
,β 可以生产PNID 1
但不能生产PNID 0
。然而,当两个实体重新开始相互通信时,α 创建的任何序列号PNID 0
都将复制到 β,并且来自 β 的序列号PNID 1
将合并到 α 的数据库中。
更一般地说,我真的希望它设置一个“中间人”位置,Ω,它做出关于 α 是否能够在未经 β 许可的情况下添加新序列号的所有决定。
我目前正在使用 SQL Server Express (2008 r2) 和 Visual Basic .NET Express (2010) 来实现服务器,但我愿意接受任何其他可能让我解决当前遇到的问题的选项。老实说,我不确定我的要求是否合理,但如果是的话,我会非常有兴趣实施它。
几乎立即,我能想到的第一件事就是在表B
中添加另一个表示位置的列,但我认为这不是“正确”的方法。尤其是关于与其他服务器通信的部分(老实说,我什至不知道我是否可以用数据库做到这一点,所以我猜这可能必须在.NET 中完成。