我正在为我的食谱设计一个数据库。我在我的设计中创建了多个表:书籍、作者、食谱、成分以及所有这些项目,我想将媒体(图像或视频)链接到所有这些表中的项目。
我正在考虑这样的设计:
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
但我将如何确保关系完整性?
谢谢
我正在为我的食谱设计一个数据库。我在我的设计中创建了多个表:书籍、作者、食谱、成分以及所有这些项目,我想将媒体(图像或视频)链接到所有这些表中的项目。
我正在考虑这样的设计:
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
但我将如何确保关系完整性?
谢谢
您提出的设计似乎暗示每个实体(书籍、作者等)可以有多个媒体文件,因此为了保持关系完整性,我将为每个关系设置单独的连接表。
如果每个表只有 1 个媒体项,则 media_id 应该在表中,而不是相反。
如果可能有多个媒体项目,您应该将它们链接到一个额外的表格中。每个项目应该有一个额外的表(例如 bookid_mediaid)。
如果您认为它应该在一个表中可链接,那么您实际上是在说明这些项目至少有一些共同点。否则,根据类型,消除在整个记录中的含义会有所不同,而这在关系理论中是不可能的。
结论:
你的设计不好。您应该为每个实体建立一个关系,或者找到所有实体的共同点并使用它来链接到您的媒体类型。
马蒂斯,
对于关系设计,您必须查看这些对象如何相互关联,然后决定数据模型。这是初稿和我假设的条件。您的案例可能有不同的规则。发布它们,应该有人能够发布准确的模型。
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...