質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

579閲覧

外部キー制約を設定したい

tanakakei

総合スコア17

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/03/10 06:08

実現したいこと

参照元「items」の全てのカラムから参照先「users」の全てのカラムに外部キー制約を設定したい。

経緯

PostgreSQL

1postgres=# SELECT*FROM items; 2id | name | price 3----+-----------+------- 4 1 | コーラ | 100 5 2 | USBメモリ | 2000 6 3 | 傘 | 500 7 4 | お茶 | 100 8 5 | 麦茶 | 100 9 6 | 烏龍茶 | 120 10 7 | コーヒー | 200 11 8 | メモ帳 | 600 12(8 行)

PostgreSQL

1postgres=# SELECT*FROM users; 2id | name | address | phone 3----+----------+--------------------+--------------- 4 1 | 山田太郎 | 東京都港区六本木 | 03-1234-5678 5 2 | 鈴木誠 | 神奈川県横浜市中区 | 090-9999-1111 6 3 | 山田葵 | 東京都杉並区今川 | 03-1111-1111 7(3 行)

という2つのテーブルを

ALTER TABLE items ADD CONSTRAINT items_users_fk FOREIGN KEY (id1, id2, id3, id4, id5, id6, id7, id8) REFERENCES users (id1, id2, id3);

というコマンドを入力することで、「items」から「users」に外部キー制約を設定しようとしたのですが

「外部キー制約で参照される列"id1"が存在しません」

というエラーが発生してしまいました。

質問

・なぜ上記のようなエラーが発生してしまっているのでしょうか?
・どうすれば参照元「items」の全てのカラムから参照先「users」の全てのカラムに外部キー制約を設定できるでしょうか?

試したこと

コマンド3行目のFOREIGN KEYの()内を
(id1, id2, id3, id4, id5, id6, id7, id8)
から
(id1, id2, id3)
に変えることにより、usersのカラム数と同等にした。

補足情報(ツールのバージョン)

PostgreSQL:15.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2023/03/10 07:08

> どうすれば参照元「items」の全てのカラムから参照先「users」の全てのカラムに外部キー制約を設定できるでしょうか? 「外部キー制約」とはどのようなものか、把握していますか?
guest

回答1

0

参照元「items」の全てのカラムから参照先「users」の全てのカラムに外部キー制約を設定したい。

まず、やりたいことの意味がわかりません。

itemsとusersには全く無関係と思われるデータが入っているテーブルであり、リレーション自体が成立しない以上、その相互間に外部キーをかける時点で意味が通りませんし、ましてや真っ当に正規化したテーブルで「すべてのカラム同士に外部キー制約を設定する」ということはありえません。

投稿2023/03/10 07:07

編集2023/03/10 11:08
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2023/03/10 07:16

itemsとusersの間にリレーションがあることを想定しているのであれば、その詳細についても明記してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問