1

「コース」(id、start_date)、「サブスクリプション」(id、assistant_id、course_id、date)、および「アシスタント」(id、registration_date)の3つのテーブルがあります。

サブスクリプションは、ご覧のとおり、外部キーを使用してコースとアシスタントを参照します。

参照された Courses.start_date が参照された Assistants.registration_date よりも古い場合、Subscription レコードを作成できないようにする CHECK 制約を追加する必要があります。Libre Baseでこれを行う方法はありますか?

テーブル編成を変更できませんでした。

4

1 に答える 1

2

このような CHECK 制約は、デフォルト エンジンでは作成できません。HSQLDB 1.8 ドキュメントから:

ALTER TABLE <テーブル名> ADD [CONSTRAINT <制約名>] CHECK (<検索条件>);

テーブルにチェック制約を追加します。現在のバージョンでは、チェック制約は挿入または更新される行のみを参照できます。

これは、TestSelfCheckConstraints.txtの次のようなコマンドでエラーが発生することを意味します。

/*e*/CREATE TABLE TC6(A CHAR, B CHAR, C CHAR, D INT, CHECK(A IN (SELECT A FROM TC5)));

したがって、このようなチェックを実行するには、クエリを使用して事前に (または後で) 検証する必要があります。これは、[イベント] タブにマクロを追加することで、フォームに対して行うことができます。アイデアについては、 https ://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=21414 の投稿を参照してください。

デフォルトのエンジンはかなり古いため、このような複雑な要件については、別のデータベース エンジンを使用するように LibreOffice Base を設定する方がよい場合があります。たとえば、MySQL を使用すると、ストアド プロシージャ トリガーを設定して、この種のチェックを行うことができます。MySQL の CHECK 制約が機能しないを参照してください。

于 2016-01-08T20:49:47.503 に答える