6

ルート スキーマのテーブルが与えられた場合:

CREATE TABLE user (
    username VARCHAR(50),
    password VARCHAR(50));

Quizおよびスキーマ内のテーブル:

CREATE TABLE Quiz.Results (
    username VARCHAR(50),
    points INT, 
    FOREIGN KEY (username) REFERENCES user(username));

userデータベースはテーブルが実際には存在しないと主張しているため、実際に外部キーを作成できません。その後、外部キーを追加することもできません。

ALTER TABLE QUIZ.RESULTS
    ADD FOREIGN KEY (username) REFERENCES user (username) 

もちろん、両方のテーブルは同じデータベースに格納されています。

これは宿題にすぎないので、外部キーの追加は省略して構いません。しかし、これが本当に H2 の制限なのか、バグなのか、それとも意図したとおりに機能するのか、興味があります。

どうにかしてスキーマuser外のテーブルを参照できますか?quiz

4

2 に答える 2

17

別のスキーマのテーブルを参照する場合は、スキーマ名を明示的に設定する必要があります。H2 のデフォルトのスキーマ名は ですpublic。例:

CREATE TABLE user (
    username VARCHAR(50),
    password VARCHAR(50));
create schema quiz;
CREATE TABLE Quiz.Results (
    username VARCHAR(50),
    points INT, 
    FOREIGN KEY (username) 
    REFERENCES public.user(username));

後で外部キー制約を作成するには、次を使用します。

ALTER TABLE QUIZ.RESULTS
    ADD FOREIGN KEY (username) 
    REFERENCES public.user(username) ;
于 2013-05-07T14:20:43.473 に答える
0

はい、非常に可能です。両方のテーブルに対応するスキーマ名を使用する必要があります。

デフォルトのスキーマ名が であると仮定するとDefaultSchema、クエリは次のようになります

ALTER TABLE QUIZ.RESULTS
ADD FOREIGN KEY (username) REFERENCES DefaultSchema.user (username) 
于 2013-05-07T14:21:18.057 に答える