[解決済み] Postgresql の外部キーの構文
質問
以下のposgresqlのコードにあるように、私は2つのテーブルを持っています。最初のテーブルstudentsには2つのカラムがあり、1つはstudent_nameで、もう1つは主キーであるstudent_idです。 2つ目のテーブルtestsには4つのカラムがあり、1つはsubject_id、1つはsubject_name、そして1つはhighestStudent_idという科目で最も高いスコアを持つ生徒のためのカラムです。これは、私が持っている以下のコードです、構文が正しいかどうかわからない。
CREATE TABLE students ( student_id SERIAL PRIMARY KEY,
player_name TEXT);
CREATE TABLE tests ( subject_id SERIAL,
subject_name,
highestStudent_id SERIAL REFERENCES students);
は、構文
highestStudent_id SERIAL REFERENCES students
のようなものを見たことがあるからです。
highestStudent_id REFERENCES students(student_id))
Postgresqlで外部キーを作成する正しい方法は何でしょうか?
どのように解決するのですか?
このテーブルを想定しています。
CREATE TABLE students
(
student_id SERIAL PRIMARY KEY,
player_name TEXT
);
外部キーを定義する方法は4種類あり(1列のPKを扱う場合)、すべて同じ外部キー制約になります。
-
対象カラムに言及せずインライン化する。
CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer REFERENCES students );
-
対象のカラムに言及してインライン化する。
CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer REFERENCES students (student_id) );
-
の中でアウトオブザライン
create table
:CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer, constraint fk_tests_students foreign key (highestStudent_id) REFERENCES students (student_id) );
-
として、別途
alter table
ステートメントを使用します。CREATE TABLE tests ( subject_id SERIAL, subject_name text, highestStudent_id integer ); alter table tests add constraint fk_tests_students foreign key (highestStudent_id) REFERENCES students (student_id);
どちらを好むかは好みの問題です。しかし、スクリプトの中では一貫性を保つべきです。最後の2つの文は、複数のカラムからなるPKを参照する外部キーがある場合の唯一の選択肢です。この場合、FKを "inline"で定義できません。
foreign key (a,b) references foo (x,y)
バージョン3)と4)のみ、Postgresのシステムで生成された名前が気に入らない場合、FK制約に独自の名前を定義することができます。
その
serial
のデータ型は、実際にはデータ型ではありません。これは、シーケンスから取り出したカラムのデフォルト値を定義する短い手の記法に過ぎない。したがって、任意のカラム
参照
として定義された列は
serial
は、適切な基本型を使って定義する必要があります。
integer
(または
bigint
に対して
bigserial
カラム)
関連
-
[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する
-
[解決済み】Teradata - 計算中に数値のオーバーフローが発生しました。
-
[解決済み] SQLクエリ「00904. 00000 - "%s: 無効な識別子".
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
-
[解決済み] T-SQLを使用して外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み】MySQLが一部の外部キーを削除する件
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】''付近の構文が正しくない
-
[解決済み】 "指定された集約関数を含まないクエリを実行しようとしました。"
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】Postgresのエラー。式として使用されるサブクエリによって返される複数の行
-
[解決済み】SQLが単一グループのグループ関数でないこと
-
[解決済み】SQL Server: 無効なカラム名
-
[解決済み] エラー: 名前解析スクリプトで正しい関数に渡された長さのパラメーターが無効です。
-
[解決済み] ORA-01821: ISO 8601 のローカルタイム付き日付のフォーマットが認識されないエラー
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] PLS-00428: この SELECT 文では INTO 句が必要です。