前段时间,我为我目前工作的公司创建了一个自定义 CMS。我们公司有多个部门,每个部门都必须考虑在内。那些在 A 部门工作的人只能访问被认为适合他们的文件。部门 B 也是如此。一些文件可以在两个部门中使用。不过,我想避免大部分重复记录,因此我没有在部门 A 中拥有特定文档的记录而在部门 B 中拥有基本相同的记录,而是使用按位 AND 操作来处理请求。
相关表格信息如下:
DOCUMENT Table
ID NAME DIVISIONS
-----------------------------------
1 Document 1 3
2 Document 2 2
3 Document 3 1
DIVISIONS Table
ID DIVISION
-------------------
1 DIVISION A
2 DIVISION B
以下查询:
SELECT A.NAME, B.DIVISION
FROM DOCUMENT AS A
LEFT OUTER JOIN DIVISIONS AS B ON LAND(A.DIVISIONS,B.ID)=B.ID
WHERE B.DIVISION='DIVISION A'
将产生结果集:
NAME DIVISION
------------------------
Document 1 DIVISION A
Document 3 DIVISION A
以及当 B.DIVISION='DIVISION B' 时的以下结果集
NAME DIVISION
------------------------
Document 1 DIVISION B
Document 2 DIVISION B
对于我的使用,这工作得很好,没有明显的减速。但在更大的环境中,缺乏关键关系可能会损害这些交易的速度。此外,在我们放弃一个部门的情况下,保持参照完整性变得更加困难。
有没有办法让外键实际上是两个值的函数?虽然这个特定问题与我公司的 iSeries (AS400) 和用于 iSeries 的 DB2 有关,但它确实是任何 DBMS 都可以回答的问题。提前致谢。