0

写真を含むデータベースを設計しています。

写真には、タグを関連付けないか、それ以上含めることはできません。

現在、画像レコードごとにスペースで区切られた列にすべてのタグワード/キーワードがあります。

これは良いデザインではないことがわかりました。空のタグワード/キーワード列を持つ画像レコードが存在する可能性があり、「馬」などの単語を含むすべての写真を元に戻すのも非効率になるためです。

だから私の質問は、独自のテーブルにキーワードを持ち、キーワードごとにレコードを持っている方が良いでしょうか?

テーブルには、列ID(INT PK)、imageId(INT KEY)、keyword(VARCHAR)を含めることができます。

これで私が目にする唯一の問題は、画像ごとに何百ものキーワードが繰り返される可能性があるということです。

誰かがこの問題を解決するためにルックアップテーブルについて仕事で簡単に言及しましたが、彼らはそれが正確に何であるかを説明しませんでした。

4

4 に答える 4

1

フィールドid、keywordを持つ名前付きタグなどを含む別のテーブルを追加できます。そして、キーワードの代わりにテーブルでタグテーブルのIDを使用します。

于 2012-10-15T15:11:28.017 に答える
-1

スペースで区切るか、その他の方法で区切ることは、おそらく最悪のオプションです。ただし、すべてのタグのルックアップテーブルは必要ありませんが、次のようにします。

T_PHOTO
photo_id = 1, photo_name = hello

T_PHOTO_TAG
photo_id = 1, tag = pretty
photo_id = 1, tag = sunset
photo_id = 1, tag = kitten

重要なのは、これらすべての単語を含むT_TAGは必要ないということです。そうは言っても、有限のタグユニバースが必要な場合は、そうすることができます。

于 2012-10-15T15:10:42.690 に答える
-1

「テーブルには、列ID(INT PK)、imageId(INT KEY)、keyword(VARCHAR)を含めることができます。」複数の写真にキーワードを追加したい場合、そのようなテーブルに複数回表示されるため、これも正規化されていません。

必要なのは、3番目のテーブルを使用するm:n関係です。

PHOTOS – at least an ID
KEYWORDS – ID and KEYWORD
PHOTO_HAS_KEYWORD – PHOTO.ID and KEYWORD.ID as combined PRIMARY or UNIQUE key with according foreign keys on them.

このような場合にm:n関係がどのように機能するかを理解するには、データベースの正規化の概要を読む必要があります。

于 2012-10-15T15:11:05.240 に答える
-1

私の好みは、キーワード/タグを1回だけ保存し、他の画像に再利用することです。

画像には多くのタグがあり、それに属します

画像

  • id
  • 名前
  • ファイル

タグ

  • id
  • 名前
  • 作成した

images_tags

  • image_id
  • tag_id

次に、特定の画像レコードのすべてのタグでグループ連結を使用できます。参照-集計関数とグループ化

于 2012-10-15T15:16:36.287 に答える