0

データベースを設計しようとしていますが、外部キーの設定に問題があります。私は InnoDB と phpMyAdmin を使用しています。

私は3つのテーブルを持っています:

1) orders
- order_id
- order_details
- files_id

2) contacts
- contact_id
- contact_details
- files_id

3) files
- filе_id (not primary key, just index)
- filename

アイデアは次のとおりです。連絡先と注文には、0 個以上のファイルを添付できます。外部キーをセットアップしようとしているので、連絡先または注文を削除すると、参照されているすべてのファイルが自動的に削除されます (DELETE の CASCADE)。

ご覧のとおり、files.file_id に 2 つの外部キー (contacts.files_id、orders.files_id) を添付する必要があります。それを行う方法、またはそれが可能かどうかさえわかりません。何か案は?

4

3 に答える 3

2

代わりにこれを行うことができます:

1)注文

  • order_id
  • 注文詳細

2)連絡先

  • contact_id
  • contact_details

3)orders_Files

  • order_id
  • file_id

4)contacts_Files

  • Contact_id(FK)、
  • file_id

5)ファイル

  • filе_id(主キー、)
  • ファイル名
于 2013-01-20T13:11:51.130 に答える
2

@MahmoudGamalの答えに代わるものは、ジェネリックのより具体的なタイプを検討ordersし、それであるということです。contactsobject

CREATE TABLE object (
  object_id       SERIAL
);

CREATE TABLE orders (
  order_id        SERIAL,
  order_details   TEXT,
  object_id       BIGINT UNSIGNED NOT NULL,
  UNIQUE (object_id),
  FOREIGN KEY (object_id) REFERENCES object (object_id) ON DELETE CASCADE
);

CREATE TABLE contacts (
  contact_id      SERIAL
  contact_details TEXT,
  object_id       BIGINT UNSIGNED NOT NULL,
  UNIQUE (object_id),
  FOREIGN KEY (object_id) REFERENCES object (object_id) ON DELETE CASCADE
);

次に、ファイルはそれらに関連付けられますobjects

CREATE TABLE files (
  file_id         SERIAL,
  filename        TEXT
  object_id       BIGINT UNSIGNED NOT NULL,
  FOREIGN KEY (object_id) REFERENCES object (object_id) ON DELETE CASCADE
);

これで、を削除するobjectと、関連する、orderまたはcontact関連filesするすべてのものがすべて削除されます。

于 2013-01-20T13:15:48.287 に答える
0

これらのテーブルでは、注文または連絡先ごとに複数のファイルを作成することはできません。

order_id+files_idとcontact_id+files_id用に2つの追加のマッピングテーブルが必要になり、files.file_idと主キーを作成する必要があります。

于 2013-01-20T13:11:41.500 に答える