リレーショナル代数/計算の証明を使用してSQLをテスト/検証できますか?


9

SQLステートメント、関数、およびストアドプロシージャの正当性をテスト/検証するために、証明の形式でリレーショナル代数および/またはリレーショナル計算を使用することは可能ですか、それとも可能ですか?

少なくともそれは可能であるように思えますが、証拠とコードの間の1:1マッピングを不正確にする欠落している詳細があるかどうかはわかりません。

このような方法を試した人はいますか?うまくいきましたか?どのような体験をしましたか?


2
私の後に繰り返してください:SQLはリレーショナルではありません。
ディアハンター

回答:


4

リレーショナル代数演算子とSQLステートメントの間には、いくつかの既知のマッピング規則があります。たとえば、Sigma演算子はSELECTステートメントにマッピングされ、結合演算子には1対1のマッピングがあり、Deltaは列のサブセットの選択にマッピングされます。

関係代数を使用してSQLステートメントの正確性を検証することは可能ですか?

はい、可能です。もちろん、すべての関係、外部キーなどを含むデータベースの明確なスキーマが必要です。場合によっては、SQLステートメントよりもリレーショナル代数ステートメントを操作する方が簡単です(ステートメントを変更および単純化するための実証済みの変換ルールがあります)。 。

しかし、その一方で、リレーショナル代数を使用してステートメントを検証することは、特にクエリを実行して結果を確認できるデータベースの準備ができている場合、SQLステートメントをテストするよりもはるかに簡単だとは思いません。


1
言いたかったのですが、関係代数はタプルのセットを使用しているため、重複を処理できないため、関係演算子は「SELECT DISTINCT」にマップされます。シグマ自体はWHERE句に対応し、パイはSELECTに対応します。
2014年

結合演算子は1:1ではなく、SQLバージョンはnullを特別に扱い、同様に述語はブール値ではありません。
philipxy 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.