0
N Artists have M Folders.
1 Folder has N Sketches.

アーティスト

ArtistId (PK)

ArtistFolder

ArtistId (PK)(FK)
FolderId (PK)(FK)

フォルダ

FolderId (PK)

スケッチ

SketchId (PK)
FolderId (FK)

私が今欲しいのはこれです:

1人のアーティストがN個のスケッチを持っています。

テーブルSketchに新しいフィールドを追加する必要があります:ArtistId

フォルダのスケッチを挿入するとき、このフィールドは常に空/nullになります。

あなたが知っているより良いデザインはありますか?

4

1 に答える 1

0

SketchesにartistIdとfolderIdの両方が与えられる理由はわかりませんが、何を作成しているのかは明らかにわかりません。

あなたは複数の種類のスケッチを持っているように私には思えます。一部のスケッチはアーティストによって「作成」され、他のスケッチは他のエンティティによって作成されます。いずれにせよ、それらにはフォルダが与えられます。したがって、null値が気に入らない場合は、次のようにすることができます。

スケッチ

SketchId (PK)
FolderId (FK)

それで:

ArtistSketch

SketchId (FK)
ArtistId (FK)

次に、ArtistSketchに制約を設定して、スケッチの重複を禁止することができます。

特定のアーティストのスケッチを取得するには、2つのテーブルを結合して次の情報を取得します。

SketchId
ArtistId
FolderId

それ以外の場合は、Sketchテーブルをクエリするだけです。

これは、クラステーブル継承の例です:http://martinfowler.com/eaaCatalog/classTableInheritance.html

PHP用のORMライブラリであるDoctrineは、MySQLで使用するためにこれを興味深い方法で取り入れており、多くのセットアップでこれを適切に機能させるために必要な不幸な量の重労働を(コード的に)削減します。 http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html

于 2012-08-01T19:31:38.450 に答える