関係モデル(Relational model)における剰余について
浮かんだ疑問
relational modelでdivideは定義されるのに、modulo(?)はなぜ定義されてないんだろう。R mod S = R - S × (R ÷ S)とかで定義できる気がする。 #数学わからん
— Shunsuke OSA (@s_osa_) 2015, 3月 10
リレーショナルデータベース入門[新訂版] p.71 によると
\( R(A_1, A_2, \cdots , A_{n-m}, B_1, B_2, \cdots , B_m) \)を\(n\)次、\( S(B_1, B_2, \cdots , B_m) \) \( (m < n) \)を\(m\)次のリレーションとするとき、\(R\)を\(S\)で割った商(\(R \div S\)と書く)は次のように定義されるリレーションである。
\( R \div S = \lbrace t | t \in R[A_1, A_2, \cdots, A_{n-m}] \land ( \forall u \in S ) ( ( t, u ) \in R ) \rbrace \)
なお、\( \div \)なる演算を“商”と名付けている理由は\( ( R \times S ) \div S = R \)となるからである。商演算は直積演算と射影演算と差演算を使って表すことができる。
\( R \div S = R[A_1, A_2, \cdots, A_{n-m} ] - ( ( R[A_1, A_2, \cdots , A_{n-m} ] \times S ) - R ) [A_1, A_2, \cdots , A_{n-m} ] \)
division ではなく modulo を考えてみる
整数では商(division)に関して、\( ( 17 \times 5 ) \div 5 = 17 \)が成り立つ。これを一般化してリレーションに拡張したのが\( ( R \times S ) \div S = R \)だと思う。
ここで剰余(modulo)に関して剰余演算子を\(\%\)と書くことにすると、整数について\( ( 17 \div 5 ) \times 5 + ( 17 \% 5 ) = 3 \times 5 + 2 = 17 \)、すなわち\( ( R \div S ) \times S + ( R \% S ) = R \)という形式が成り立つ。
これを変形すると\(R \% S = R - ( R \div S ) \times S \)となり、冒頭の疑問が導かれる。
フォーマルに定義しようとすると(かなり自信ないけど)こんな感じだろうか。
\( R \% S = \lbrace t | ( t \in R ) \land ( ( \exists u \in S ) ( ( t[A_1, A_2, \cdots , A_{n-m}], u ) \notin R ) \lor ( t[ B_1, B_2, \cdots , B_m ] \notin S ) ) \rbrace \)
気になるポイント
- そもそもこの考え方は合っているのか。
- 商が定義されているのに剰余が定義されていないのは何故か。
- 商も有用性が低いように思われるが、剰余の有効な利用方法はあるのか。
参考になるエントリや書籍があったら教えて頂けると嬉しいです。