4

クックブックのデータベースを設計しています。私は自分のデザインに複数のテーブルを作成しました:本、著者、レシピ、材料、そしてこれらすべてのアイテムについて、メディア(画像またはビデオ)をこれらすべてのテーブルのアイテムにリンクしたいと思います。

私は次のようなデザインを考えていました:

media_id,
rid (primary key of foreign table),
rtype (1=book, 2=author, 3=recipe, 4=ingredient),
media_type(1=image,2=video),
media_url

しかし、どうすればリレーショナル整合性を確保できますか?

ありがとう

4

3 に答える 3

5

提案された設計は、各エンティティ(本、著者など)が複数のメディアファイルを持つことができることを示唆しているようです。したがって、関係の整合性を維持するために、関係ごとに個別のジャンクションテーブルを用意します。

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

于 2011-03-01T21:42:01.540 に答える
1

各テーブルにメディアアイテムが1つしかない場合は、その逆ではなく、media_idをテーブルに含める必要があります。

複数のメディアアイテムが可能な場合は、追加のテーブル内でそれらをリンクする必要があります。アイテムごとに追加のテーブルが必要です(たとえば、bookid_mediaid)。

1つのテーブル内でリンク可能である必要があると考える場合、実際には、それらのアイテムには少なくとも共通点があると述べています。そうしないと、タイプに応じて、レコード全体でridの意味が異なり、関係理論では不可能になります。

結論:

あなたのデザインは良くありません。エンティティごとに関係を設定するか、すべてのエンティティに共通するものを見つけて、それを使用してメディアタイプにリンクする必要があります。

于 2011-03-01T21:39:58.187 に答える
0

Matthijs、

リレーショナル設計の場合、これらのオブジェクトが互いにどのように関連しているかを調べてから、データモデルを決定する必要があります。これが最初のドラフトと私が想定している条件です。あなたのケースには異なるルールがあるかもしれません。それらを投稿すれば、誰かが正確なモデルを投稿できるはずです。

Each book can be written by many authors and each author can write different books.   ( M:N)
RECIPES <--> BOOKS (M:N)
RECIPES <--> INGREDIENTS (M:N)

These would be the initial set of tables.
BOOKS, AUTHORS, BOOKS_AUTHORS_ASC, RECIPES, BOOKS_RECIPES_ASC,
INGREDIENTS, RECIPES_INGREDIENTS_ASC.

メディアが1冊の本にのみ関連している場合は、別のテーブルがあります。たとえば、次の列のメディアです。BOOK_IDは、このメディアが関連付けられている親列です。

MEDIA
-------------------------------------
MEDIA_ID NUMBER -- Primary-key
BOOK_ID  NUMBER -- Foreign Key..
MEDIA_TYPE varchar2(20) -- 'IMAGE','VIDEO' etc..
other_column1 varchar2(50),
other_column2 varchar2(50)
-- so on..

また、特定の画像/動画を複数の本に関連付けることができ、各本に異なる画像を含めることができる場合は、関連付けに異なるエンティティを使用できます。

Media
--------
Media_id number -- primary key
media_type varchar2(10),
media_name varchar2(100),
--- other columns.

MEDIA_BOOK_ASC
--------------
MEDIA_BOOK_ASC_ID NUMBER,
MEDIA_ID NUMBER,  --foreign key to media table.
BOOK_ID NUMBER,   --foreign key to book table
--other columns related to associations...
于 2011-03-01T21:47:44.230 に答える