0

アーティストエンティティがあります。アーティストは、最大 3 枚の写真 (最小 1 枚) と、タイトル付きの 1 曲を持つことができます。

だから私の最初のアイデアは、写真を別のテーブルPictureにid、artist_id、pathで保存することでした。
そして、id、artist_id、path、title を持つSongエンティティに曲を保存するには

しかし、別のアイデアとして、これらのメディアを、id、artiste_id、picture1、picture2、picture3、path_song、title_song を使用してMediaテーブルに格納することもできます。

それを行う最良の方法は何ですか?

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

2

現在の要件をモデル化する最も正確な方法は、3枚の写真と1曲をArtistテーブルのフィールドとして直接保存することです。そのシナリオでは、アーティストを垂直に分割して別のメディアテーブルを作成する必要はほとんどありません。


唯一の質問は、3枚以上の写真と1曲以上は必要ないということですそうでない場合は、最初のアプローチを実行しますが、次のように変更します。

ここに画像の説明を入力してください

CHECK (PICTURE_NO BETWEEN 1 AND 3)
CHECK (SONG_NO = 1)

関係の識別とチェックの組み合わせにより、目的の最大値が確実に守られます。拡大する必要がある場合は、チェックを変更(または完全に削除)するだけです。

残念ながら、このモデルでは最小値(少なくとも1つの画像と曲の存在)を保証することはできません。少なくとも、DBMSがサポートしている場合でも、価値があるよりも厄介な遅延循環参照に頼らなければなりません。


そしてもちろん、実際の生活では、芸術作品に複数の芸術家が関わっている可能性があります。関係がN:Nではなく1:Nであると確信していますか?

于 2013-02-12T13:10:34.633 に答える
0

データベースの正規化の観点からは、最初のアイデアが優れています。

于 2013-02-12T11:52:10.360 に答える