0

Web アプリのような単純な CMS のデータベースに取り組んでいます。基本的に、コンテンツグループの一部であるコンテンツのビットで構成されています。ページの一部であるテキストのように。そのために、テーブルと1:n の関係を持つpageテーブルを考えていました。text

また、アセットをページまたはテキストにリンクすることも必要です。したがって、テキストにサムネイルがリンクされている可能性がありますが、ページにもサムネイルがリンクされている可能性があります。どういうわけか、私はそれをうまく行う方法を理解できません。assets列を使用してテーブルを作成し、各行pageIdtextId1 つだけが使用されるようにする必要がありますか? 私には少し奇妙に感じます..または、2 つの異なる資産テーブルを作成する必要がありますか?

皆さんがこれで私を助けてくれることを願っています!

4

2 に答える 2

1

アセットは独立しており、どのページでも使用されていない状態で完全に機能する可能性があります。たとえば、サーバーにアップロードされたグラフィックを考えてみてください。

同様に、複数のページで再利用されるアセットがあるかもしれません。グラフィックは確かに思い浮かびますが、いくつかの定型文、広告、またはその他の一般的な要素もいくつかあります。

したがって、問題は、アセット テーブルに相互に排他的な外部キーがないことです。あなたの問題は、資産テーブルに外部キーがあることです。

代わりに、 にマップする交差テーブル(多対多) が必要です。アセットを使用できるモノが複数ある場合は、アセットを使用するモノごとに 1 つの交差テーブルを作成します。assetspages

于 2013-06-10T01:29:50.563 に答える
1

このような状況を処理するには、一般に次の 2 つの方法があります。

  1. 排他的なFKを作成するか(すでに発見したように)、
  2. または、次のように、継承と 1 つの FK のみを使用します...

ここに画像の説明を入力

...しかし、子テーブルが 2 つだけの場合、これはおそらくやり過ぎです。OTOH、関係の両側でテーブルの数が増えると、このスキームは「関係の乗算」を回避できます。次に例を示します。

ここに画像の説明を入力

リレーショナル データベースで継承を実装する方法に関するヒントについては、この投稿をご覧ください。

于 2013-06-10T01:35:12.890 に答える