这是什么
有很多故事(每个故事都有很多台词)。每个都被翻译成多种语言。每种语言都有很多口音。我想让用户选择语言(只能选择其中涵盖所有故事的许多语言),然后从每种语言的所有口音中准确选择一种口音。
数据示例
假设我们有 2 个故事,每个故事都翻译成 3 种语言,每种语言有 5 种口音(音频和声音)
数据访问要求
现在认为用户选择了
带有重音 1 的语言 2和带有重音 4 的语言 3
现在音频将按如下方式播放
Story 1 > Line 1 from Language 2 of Accent 1
然后Story 1 > Line 1 from Language 3 of Accent 4
Story 1 > Line 2 from Language 2 of Accent 1
然后是口音 4 的语言 3 的“故事 1 > 第 2 行”- // 继续直到故事结束然后开始新的故事并像这样玩
可能的实体/表
- 故事
- 线路
- 语言
- 口音
- 音频
显然这是我编的,这里需要帮助。
哪里需要帮助
为了实现我对数据的预期用途,表格应该是什么样子,它们之间的关系是什么(比如stories hasMany Languages
,类似的事情)。
并且......
我如何查询数据以向用户提供有关顶部“它是什么”部分中的第一个选择的信息。
关于我:我在软件开发方面经验丰富,但在复杂的模式设计方面经验不多。我(认为)可以处理相当复杂的数据库内容,但显然不能处理这个。
信息:我正在 MySQL (MariaDB) 中执行此操作
在我看来,您的任务很简单,只需编写在 MariaDB 和 MySQL 中“相同”工作的代码即可。
有两个“事情”需要考虑:
Stories
)FORIGN KEYs
和实现JOINs
。并且可能通过“多对多”映射表。让我讨论三种模式模式:
id
和长字符串之间进行映射。让我以您的例子为例,
stories hasMany Languages
其中表格Stories
包含有关故事的一般信息。(这是一个“实体”。)另一个表 ,
Stories_Languages
有story_id
一个列 (lang_id
),其中包含“en_US”、“en_GB”、“fr_FR”、“fr_CA 等。(这是一个“关系”。)如果这就是您所需要的语言/口音,那么
Stories
就是一个简单的“一对多”表,并且Stories_Languages
是一个简单的映射表。但是,如果有很多关于该语言的细节,则需要一个单独的实体表,
Languages
并且Stories_Languages
成为一个成熟的“多对多”表。看看你的图表,我认为你的困难始于你错误地尝试将“语言”建模为“线条”的从属,而它实际上是一个独立的实体。除此之外,模型的其余部分在概念层面上似乎很好。
考虑到键,在任何地方都将 Id 列作为主键存在常见问题。至少您没有为“音频”使用另一个 id。
解决第一个问题并尝试更合乎逻辑地使用代理来组成关系键后,我认为您可以使用与此类似的模型:
对于你的下一个问题,我不太确定你想查询什么,但这很容易。例如,您可以使用类似的方法来获取特定语言口音的故事的叙述进度:
经过第二次阅读后,我想我更好地理解了您的查询要求。要获取每个故事都完整叙述的口音列表,您可以使用如下内容:
这是我现在能想到的最好的解决方案,但可能还有更简单的解决方案。