0

のようなimage他の独立したテーブルの画像を保存するためのテーブルを1つ持つことを考えています。.userproductJohn Smithuserlaptopproductimage

imageテーブルにはidtitleおよびがありますfilename

そして、次のフィールドのようにs を適切なsimagetableに関連付けるテーブルを考えています: 、および.imageimage owneruserimage_idtable_idtable

一部のエントリは次のようになります。

image_id | table_id | table
-----------------------------
1        | 1        | user
2        | 1        | user

3        | 2        | user
4        | 2        | user

5        | 1        | product
6        | 1        | product
7        | 1        | product

8        | 2        | product

9        | 3        | product
10       | 3        | product

11       | 4        | product

問題は次のとおりです。

このデータベース設計は推奨されますか? この要求に対する最善のアプローチは何ですか?

もちろん、もう 1 つの方法は、単一のテーブルの代わりにuser_imageproduct_imageおよびテーブルを使用することです。company_imageimage_table

4

1 に答える 1

1

いいえ、そうすると外部キーの利点が失われるからです。

ジャンクション テーブルを使用します。

create table product (
  product_id bigserial primary key,
  name citext not null unique
);

create table user (
  user_id bigserial primary key,
  name citext not null unique
);

-- personally, I would store the file in the db and use incremental backups
-- pedantically, I prefer "picture" over "image" as "image" has 2 meanings in computers
create table picture (
  picture_id bigserial primary key,
  filename citext not null,
  ...
);

create table product_picture (
  product_id bigint references product(product_id),
  picture_id bigint references picture(picture_id),
  primary key (product_id, picture_id)
);

create table user_picture (
  user_id bigint references user(user_id),
  picture_id bigint references picture(picture_id),
  primary key (user_id, picture_id)
);
于 2013-07-26T19:39:16.307 に答える