Как создать медиа таблицу со ссылками на несколько (как минимум 4) таблиц? - PullRequest
3 голосов
/ 02 марта 2011

Я создаю базу данных для моих поваренных книг. Я создал несколько таблиц в своем дизайне: книги, авторы, рецепты, ингредиенты и для всех этих элементов я хочу связать медиа (изображения или видео) с элементами во всех этих таблицах.

Я думал о дизайне как:

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

Но как мне обеспечить целостность отношений?

Спасибо

Ответы [ 3 ]

4 голосов
/ 02 марта 2011

Предполагается, что предлагаемый вами проект подразумевает, что каждая сущность (книга, автор и т. Д.) Может иметь несколько мультимедийных файлов, поэтому для обеспечения целостности реляций у меня будут отдельные таблицы соединений для каждого отношения.

enter image description here

1 голос
/ 02 марта 2011

Если для каждой таблицы есть только 1 медиа-элемент, media_id должен быть в таблицах, а не наоборот.

Если возможно несколько медиа-элементов, вы должны связать их в дополнительной таблице.,Для каждого элемента должна быть добавлена ​​дополнительная таблица (например, bookid_mediaid).

Если вы считаете, что она должна быть связана внутри одной таблицы, вы на самом деле утверждаете, что эти элементы имеют по крайней мере что-то общее.В противном случае рид будет иметь разное значение во всех записях, в зависимости от типа, а это невозможно в теории отношений.

Заключение:

Ваш дизайн не очень хорош.Либо у вас должны быть отношения для каждой сущности, либо вы найдете общие для всех сущностей и используйте их для связи со своими медиатипами.

0 голосов
/ 02 марта 2011

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.

Если носитель относится к одной и только одной книге, у вас будет другая таблица, скажем, носитель со следующими столбцами. 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...
...