web-dev-qa-db-ja.com

テーブルに2つの外部キーを設定できますか?

次の表があります(太字のプライマリキー。イタリックの外部キー)

顧客テーブル

  • ID --- Name --- Balance ---Account_Name--- Account_Type

アカウントカテゴリテーブル

  • Account_Type ----バランス

顧客詳細テーブル

  • アカウント名 ---ファーストネーム----ラストネーム---アドレス

Customerテーブルに2つの外部キーを設定できますか。これをMySQLに実装するにはどうすればよいですか?


更新済み

私は最終プロジェクトのためにウェブベースの会計システムを開発しています。

アカウントカテゴリ

アカウントタイプ --------------バランス

資産
負債
株式
費用
所得

資産

  • Asset_ID ----- Asset Name ---- Balance ----Account Type

売掛金

  • Receivable_ID ----- Receivable Name ------- Address -------- Tel -----Asset_ID----アカウントタイプ

売掛金勘定

  • Transaction_ID ---- Description ---- Amount --- Balance ----Receivable_ID----Asset_ID---アカウントタイプ

ソフトウェアを使用してER(エンティティリレーションシップ)ダイアグラムを作成し、リレーションシップを指定すると、上記のように複数の外部キーが自動的に追加されました。デザインが十分に聞こえませんか?

18
Rav

はい、MySQLはこれを許可します。同じテーブルに複数の外部キーを持つことができます。

詳細はこちら FOREIGN KEY Constraints

25
user319198
create table Table1
(
  id varchar(2),
  name varchar(2),
  PRIMARY KEY (id)
)


Create table Table1_Addr
(
  addid varchar(2),
  Address varchar(2),
  PRIMARY KEY (addid)
)

Create table Table1_sal
(
  salid varchar(2),`enter code here`
  addid varchar(2),
  id varchar(2),
  PRIMARY KEY (salid),
  index(addid),
  index(id),
  FOREIGN KEY (addid) REFERENCES Table1_Addr(addid),
  FOREIGN KEY (id) REFERENCES Table1(id)
)
26
user2915443

スキーマ内の外部キー(Account_NameおよびAccount_Type)特別な処理や構文は必要ありません。 Customerテーブルで2つの別個の外部キーを宣言するだけです。確かに、これらは意味のある言葉の意味での複合キーを構成するものではありません。

このスキーマには他にも多くの問題がありますが、複数の一意の列、または機能的に別の列に依存する列から主キーを構築することは一般に良いアイデアではないことを指摘しておきます。これらのケースの少なくとも1つが、CustomerテーブルのID列とName列に当てはまるようです。これにより、同じID(異なる名前)で2つの行を作成できますが、これは許可したくないと思います。

4
Marcelo Cantos