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