【问题标题】:Database design implementing support for different languages数据库设计实现对不同语言的支持
【发布时间】:2013-12-22 22:32:02
【问题描述】:
今天我在练习数据库设计,例如我正在尝试构建一个数据库设计,我想在其中存储我最喜欢的节目。我已经将此数据库规范化为第三种形式(至少我认为我有)。但是我遇到了这个设计的问题,实际上,我该如何执行这样的查询:
- 是否有任何节目具有语言(比如说意大利语)和状态 Emitting 并且有超过 5 集可供选择?
我认为我在语言和 show_internation_data 表上犯了一个错误,但我不确定...
另外,如果你能告诉我这个设计有多糟糕以及需要改进的地方,或者只是发表一篇很棒的文章,那就太棒了!
图表:
这是图片:http://i.stack.imgur.com/abhwx.png
【问题讨论】:
标签:
database
database-design
relational-database
database-schema
foreign-key-relationship
【解决方案1】:
你是对的。 show_international_data 存在问题,但这不是此设计的唯一问题。
我会从 show_languages 中删除 show_ID 列并将其添加到 show_international_data 中。这种对表的重新排序将允许您编写查询来回答您的问题。
select show_ID
from show s left join show_international_date sid
on s.show_ID = sid.show_ID
where s.episodes_available > 5
and sid.status = 'Emitting'
and sid.language_id = (select language_ID
from show_languages
where language = 'Italian')
除了这个特定的问题,您或许应该考虑以下几点:
- 类型、主题和摘要真的会因语言而异吗?
- ...rating 和 cover_img 不会因语言而异吗?
- show to show_producer 应该是多对多关系。
- 要展示的类型和要展示的主题也可能是多对多的。
如果我正在开发它,我还将为状态、流派和主题创建表,并将 ID 存储在 show_international_data(或它们最终进入的任何表)中,而不是将它们存储为 varchar