考虑两个表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中完成。
答案 0 :(得分: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
然后,您可以为不同位置的这些视图授予权限,而不是创建另一个Ω位置。