sql >> データベース >  >> RDS >> PostgreSQL

複合PKを参照するPostgresFK

    現在の構造ではできません。

    外部キー参照のターゲットは、PRIMARYKEYまたはUNIQUEのいずれかで宣言する必要があります。だからこれ

    CREATE TABLE foo (
        id SERIAL PRIMARY KEY,
        foo_created_on ABSTIME,
        foo_deactivated_on ABSTIME,
        UNIQUE (id, foo_created_on)
    );
    

    またはこれ

    CREATE TABLE foo (
        id SERIAL,
        foo_created_on ABSTIME,
        foo_deactivated_on ABSTIME,
        PRIMARY KEY (id, foo_created_on),
        UNIQUE (id)
    );
    

    bar.foo_idのターゲットとして機能します。その場合、バーには簡単な参照があります。

    CREATE TABLE bar (
        id SERIAL,
        bar_created_on ABSTIME,
        bar_deactivated_on ABSTIME,
        foo_id REFERENCES foo (id),
        PRIMARY KEY (id, bar_created_on)
    );
    

    fooで最初に宣言した主キーを参照する場合は、その主キーをbarに格納する必要があります。一部ではなく、すべてを保存する必要があります。したがって、fooを変更せずに、このようなバーを作成できます。

    CREATE TABLE bar (
        id SERIAL,
        bar_created_on ABSTIME,
        bar_deactivated_on ABSTIME,
        foo_id INTEGER NOT NULL,
        foo_created_on ABSTIME NOT NULL,
        FOREIGN KEY (foo_id, foo_created_on) REFERENCES foo (id, foo_created_on),
        PRIMARY KEY (id, bar_created_on)
    );
    


    1. 1つの選択列の値を保存して、次の列に使用することは可能ですか?

    2. Oracle SQL-NULL値のmax()

    3. AndroidアプリからMySQLデータベースに接続するにはどうすればよいですか?

    4. Oracle PL / SQL:BLOBまたはCLOBが空かどうかを確認します