0

我有一个结构如下的表:

ProjectID | Field1 | Field2 | Field3 | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...
------------------------------------------
3         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...

以及一些需要访问该表以读取数据并在进程的和写回一个值的外部系统。

问题是每个外部系统只能访问与他的项目相关的数据,IE:

  • 系统 1 -> 项目 ID = 2
  • 系统 2 -> 项目 ID = 3
  • 系统 3 -> ProjectID = 1

我想保持这些数据分开以避免错误,因为这些系统将在我们的应用程序外部开发,我不能假设他们只会使用他们的数据。

我遇到了两种解决方案:

  1. 在不同的 DB 模式中为每个 ProjectID 创建一个表,并仅向每个外部系统提供访问其表的凭据。
  2. 为每个 ProjectID 创建一个可更新的视图,该视图仅为特定项目提取数据,并仅向每个外部系统提供访问其视图的凭据。

还有其他想法吗?

谢谢!

4

3 回答 3

0

如果您有多个项目与之交互,您确实需要开发一个与数据库进行所有交互的 API。保持你的理智、你的睡眠时间表和你的数据完整性。不要在数据库层解决这个问题。

于 2012-08-30T07:37:13.950 回答
0

因此,如果我关于 API 的其他答案对您不起作用,那么安全处理此问题的适当方法是完全分离数据。不要混合行或将任何内容存储在同一个表(或最好是数据库)中。

我将创建一个特定于客户端的数据库,并让每个外部系统只能访问该数据库。

您是否需要在某个时候合并数据?如果是这样,您将失去密钥完整性,因为您将在每个数据库表中(大部分)具有相同的 PK。

如果您确实需要合并数据,并且不能选择多列键,那么可更新视图确实是您唯一的选择,这样您就可以保持完整性。

于 2012-08-30T07:55:22.703 回答
0

只是一些清晰的流...

我正在努力解决类似的问题。我目前的解决方案是我有一组表,但每条记录都有一个引用 OrganizationID 的列。然后我的外部程序附加在 SQL Select... Where...and User.OrganizationID = table.OrganizationID 中。

当一个人(父组织的负责人)查看数据时,我不会附加 sql,因此他们可以看到跨越所有子组织的数据。

这个解决方案与可更新视图没有太大区别(除了我有一个应用程序处理它)。我也在寻找更好的解决方案,因为我的一些数据可能跨越多个应该与其他数据交互的组织(例如,项目 1 和项目 2 可以与其他数据交互,但项目 3 是孤立的,项目 4 可以看到这一切)

于 2013-01-18T17:15:16.230 回答