2011-03-01 55 views
2

我正在为我的食谱设计一个数据库。我在我的设计中创建了多个表格:书籍,作者,食谱,配料以及所有这些项目,我希望将媒体(图像或视频)链接到所有这些表格中的项目。如何使用多个(至少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 

但我将如何确保关系完整性?

感谢

回答

3

你提出的设计似乎暗示着每个实体(书,作者等),可以有多个媒体文件,所以要保持关系完整性,我会为每个关系的单独接线表。

enter image description here

+0

嘿乔:什么(非常快:-))工具,您使用的呢? – Peter 2011-03-01 21:46:43

+0

@Peter:Microsoft Visio中 – 2011-03-01 21:48:19

+0

乔,感谢您的回答,这是很清楚。 – Matthijs 2011-03-01 22:29:42

1

如果只有1为每个表钱款时,media_id应在周围的其他方法代替的表格中。

如果有几个媒体项目是可能的,你应该链接它们在一个额外的表格。每个项目应该有一个额外的表格(例如bookid_mediaid)。

如果您认为它应该可以在一个表内链接,那么您实际上指出这些项目至少有一些共同点。否则,在整个记录中,rid会有不同的含义,这取决于类型,这在关系理论中是不可能的。

结论:

你的设计不好。要么你应该为每个实体建立一个关系,要么找到所有实体的共同点,并用它来链接到你的媒体类型。

+0

嗨,彼得,有可能是有任何其他表中的一行多个媒体行。 – Matthijs 2011-03-01 22:31:01

+0

那么它要么选择2(一乔作出视觉)或选项3(隔离有什么共同的表的新表) – Peter 2011-03-02 08:39:24

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. 

如果媒体是关系到一个只有一本书,你将有一个不同的表,说,媒体有以下的列。 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... 
+0

拉杰什,感谢您的评论,我忽略了一个事实,即一本书可以有不同的作者,将增加本我的设计。 – Matthijs 2011-03-01 22:27:29