少し前に、現在勤務している会社用のカスタム 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
私の使用では、これは目立った速度低下もなく問題なく動作します。しかし、大規模な環境では、キー付きの関係がないと、これらのトランザクションの速度が低下する可能性があります。また、ディビジョンを削除した場合、参照整合性を維持することがより困難になります。
実際に2つの値の関数である外部キーを持つ方法はありますか? この特定の問題は、私の会社の iSeries (AS400) と iSeries 用の DB2 に関連していますが、実際にはどの DBMS についても答えられる問題です。前もって感謝します。