gpt4 book ai didi

MySQL 建模 : Relationship normalization & ring issue

转载 作者:行者123 更新时间:2023-11-29 00:00:44 25 4
gpt4 key购买 nike

我正在构建这个 MySQL 模型来组织电影收藏。它将管理电影和系列/剧集。每部电影/剧集可能有一个或多个音频流,音频/视频的编解码器可能会有所不同。 (暂时不要介意字幕)

我不是专家,所以我正在寻求建议:

  • 建立关系。很久以前有人告诉我,当模型具有“环”关系时,意味着模型中的关系形成环/环(如图),那么建模可能是错误的。这是错误的吗? enter image description here

  • 多个引用:表movies_audios在此表中,fk_movie_id 可能指的是 movies.movi​​e_idepisodes.episode_id。这个可以吗?我的意思是一个主键可以引用不同的表?

enter image description here

更新根据 ABrowne 的回答建模:

enter image description here

“对于一部电视剧来说,你不会有一集是喜剧的” enter image description here

更新 根据 ABrowne 的回答建模: enter image description here

最佳答案

要回答您的第一个问题,您提到的“戒指关系”既不正确也不正确,但确实暗示了一种复杂的关系。

在您描述的关系中,电影“可能有”一个或多个编解码器,而一个编解码器“可能有”一集或多集。假设我们的电影是“Ironman”,它可以用 H.264/MPEG-4 和 MPEG-4 ASP 编码。所以这个关系看起来是正确有效的。剧集也可以编码为 H.264/MPEG-4,并且单一编码(分发/媒体,例如 DVD,也许?)可能包含多个剧集。也许我误解了你的“编解码器”,所以如果我错了请纠正。这将在编解码器和剧集之间创建多对多关系,其中缺少一个名为“分发/媒体”的表。

还有 movie_audios,我假设您指的是该剧集/电影所涉及的不同语言音频?

我会考虑规范化你的结构并考虑这样的事情(这只是一个骨架):

video
- video_id
- plot
- fk_series_id
- series_no <- this is the number within a series
- rating
- imdb_ref
- fk_genre_id
- fk_codec_id <- 1 to many relationship between codec and video

video_genre
- fk_video_id
- fk_genre_id

genre
- genre_id
- name

subtitles
- fk_video_id
- fk_language

audio
- audio_id
- fk_video_id
- fk_language_id

language
- language_id

audio_codec
- fk_audio_id
- fk_codec_id

codec
- codec_id
- name

series
- series_id
- series_name
- fk_series_type_id

series_type
- series_type_id
- name

关于您关于当前编解码器关系的多个 id 的问题的第二部分,困难在于您如何查找它。

例如,假设您有 movie_id = 9,而您的 episode_id = 9,这是一部电影还是一集?您可以通过几种方式解决此问题:

1) 把两个外键放到codec上,根据关系存在性用xor判断

2) 您可以在编解码器表上添加“类型”。这将需要您的插入方法以确保它被正确应用

3) 您可以确保您的 ID 在两个表中都是唯一的。一种复杂的方法是在生成 id 时对两者进行查找。您甚至可以在插入时创建一个触发事件,但更简单的方法是在 id 前加上一个字母,这样 m9 就是一部电影,而 e9 就是一集。

----更新发布模型更新----

所以阅读关系和表格,它们似乎是我想象的那样。电影/剧集(我们称之为录音)可以有多种类型,例如浪漫和喜剧。然而,有一种喜剧类型。从这一流派中我们可以正确地找到它相关的所有录音。

一个录音可以有很多音频,也可以有很多字幕。每个音频和每个字幕都是一种语言。音频也有一个音频编解码器。从一种语言或一种编解码器中,我们可以找到它相关的所有录音。

一个录音也有一个视频编解码器,一个电视系列有很多录音。

我会重新考虑您对“电影”的命名,因为它能够更笼统地涵盖所包含的内容,例如视频或录音。

此外,我还会考虑您是否需要列出系列中的电影,例如 Ironman 1-3。这将再次质疑 tv_series 的命名是否更通用。

为了简化您的模型,您可以将编解码器视频和音频合并为一个。如果您需要区分,您可以在其上放置一个类型字段,或者与 codec_type 表建立关系。

关于MySQL 建模 : Relationship normalization & ring issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com