1

考虑两个表AB,如下所示(让我为丑陋的 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 中完成。

4

1 回答 1

2

您是否考虑过为 α 创建视图,例如

select * from A where PNID0=0
select * from B where PNID0=0

并为 β 创建视图

select * from A where PNID0=1
select * from B where PNID0=1

然后,您可以为不同位置授予这些视图的权限,而不是创建另一个 Ω 位置。

于 2011-02-28T13:38:19.157 回答