0

開発中に、主要な追加ごとにデータベースを追加しています。私の最新の画像ギャラリー プログラムは、これらすべての質問を自問しています/

可能なテーブルの簡略化されたバージョン

Image (id, name, path, state)
Gallery (id, name, path, state)
Image Gallery Relationship (image id, gallery id)
Image User Relationship (image id, user id)
Image Venue Relationship (image id, venue id)
Image Event Relationship (image id, event id)
Gallery User Relationship (image id, user id)
Gallery Venue Relationship (image id, venue id)
Gallery Event Relationship (image id, event id) 

ユーザーの写真からのギャラリー、イベントに関連するギャラリー、会場に関連するギャラリーで、同じ写真をユーザーが所有/撮影し、イベントと会場に割り当てることができると考えています。

同じデータベースを使用してユーザーのプロフィール写真を保存したい場合、別のテーブルを作成しますか? プロフィール画像IDをユーザーテーブルに入れる必要がありますか? 写真の所有権を Image テーブルに入れる必要がありますか? しかし、ほとんどの場合、写真の大部分はユーザーによってアップロードされません。イベントや会場の「プロフィール写真」はどうですか?それともaa galleryの表紙絵?多くのテーブルを作成していますか、それとも十分ではありませんか?

補足一般に、列を作成するとき、それが必須の単一値属性である場合、それをテーブルに配置すると思います.nullまたは複数のものに関連付けられている可能性がある場合は、おそらく別のテーブルにあるはずです. しかし、私は現在 60 のテーブルにいて、プログラムの半分にも達していません。

最近は本当にメンターが不足しているので、すべてのアドバイスは大歓迎です

写真関連、それは私の現在のデータベースです 私の現在のデータベース

また、同様の質問を持つ将来の人々を助けるために、私の質問をより一般化できる場合は、編集を気にしません

4

2 に答える 2

2

何を決めても、それをフレームに入れてギャラリーに吊るす必要があります。

あなたはそれを単純化したいかもしれません。別の見方をしてみましょう。画像が関連付けられている可能性のある 1 つの中心的なモノのテーブルを考えてから、それらのモノの共通点を見つけてください。typeフィールド ( galleryvenue、 )を追加しますevent。1 つまたは 2 つのフィールドを追加することになるかもしれませんが、最終的には作業とデータベースが大幅に簡素化されます。私は自分が作成しているものを探しているのと同じ魂を通り抜けています。

于 2011-03-24T05:29:19.897 に答える
1

それはすべて、すべてのオブジェクト間の正確な関係に依存します。あなたの説明は少しあいまいだったので、ここでいくつかの仮定を立てますが、そこから得られるものは次のとおりです。

主なルール: 多対多の関係がある場合にのみ結合テーブル (Gallery_Image_Relationship (gallery_id, image_id) など) を使用します。gallery-image が良い例だと思います。ギャラリーには多くの画像が含まれており、画像は多くのギャラリーに属することができます。ただし、それ以外の場合は、不要な複雑さに過ぎません。

残りの関係については、テーブルの 1 つに外部キーを配置するだけです。1 対多の場合、表は明らかです。ユーザーは多くの画像をアップロードできますが、画像をアップロードできるのは 1 人のユーザーだけですか? 次に、images テーブルが uploader_id 列を取得します。

そうは言っても、DB では次のようになります。

users:
  id,
  name,
  profile_image_id, #A user can only have one profile pic (at a time)
  etc.

images:
  id,
  name,
  uploader_id, #It can only be uploded by one person
  etc.

galleries:
  id,
  name,
  cover_image_id,
  etc.

images_galleries: # 'cause images:galleries is many:many
  image_id,
  gallery_id

(私はそれがどの言語だと考えているのかわかりません。それは、、、、およびアポストロフィを強調しました... userbyis

画像を会場やイベントに関連付けようとすると、より主観的になります。ほとんど/すべての画像が特定のイベントのものであると思いますか? その場合、画像テーブルに event_id 列が必要になるでしょう。会場についても同様です。

しかし、多くの画像が特定のイベントのものではないことが予想される場合、それらの列は DB スペースの無駄になります。ギャラリーは通常、単一のイベント/会場に関連付けられますか? もしそうなら、それがあなたの外部キーが属する場所です。

どちらもうまく適合しない場合でも、結合テーブルは引き続きオプションです。正規化の頑固者が承認するとは思えませんが、うるさい必要がない場合もあります。

それが役立つことを願っています!

于 2011-03-24T05:33:56.397 に答える