我有点困惑这个"简单"数据库设计。也许有人有更好的主意。我需要设计一个具有以下要求的帮助系统:
似乎是一个非常简单的模型,但我的问题是以下
1)当英语是后备语言并且总是需要先创建才能创建其他语言之前,使用ParentId是一个好的设计吗?
2)我如何使用后备语言进行查询?我的意思是假设用户选择西班牙语作为他的首选语言。但对于西班牙语,一些内容不存在于西班牙语中,而仅以英语存在。如何查询以西班牙语存在的项目,但也返回仅包含没有西班牙语孩子的英语内容的项目。
答案 0 :(得分:0)
我对你的图表有一些评论:
HelpContent
和HelpContent_Categories
之间的关系的关系基数(仅在图表中)不正确。关系的许多结尾应附加到交叉实体类型(HelpContent_Categories
)。外键位于正确的位置,但线条绘制不正确。
HelpContent
和Language
之间的基数不正确。您显示的是1:1,但基数应为1:M。
总的来说,我会以不同的方式处理这些规定的要求。我希望强制性英语内容是一个表格,所有翻译都是与Language
相交的单独表格。您可以使用ParentId
将这样的安排压缩到您已经显示的表格中,但这可能会令人困惑。它当然不会使用架构来强制执行您的业务规则,即英语是强制性的,所有其他语言都是可选的。
英文内容位于Category
和HelpContent
表格中。所有翻译的值都在Language
的交集表中。
要查询任何给定语言的帮助,您可以使用转换表OUTER JOIN main / English表,然后将翻译的和英语值COALESCE放在一起。如果翻译存在,那么您将获得翻译。如果它不存在,你会把英语作为后备。
我不得不承认,让我错误地使用两个表而不是一个表,但它确实使用模式强制执行您的业务规则,而不是必须编写和维护的额外代码。