我正在尝试进行一次支持多种语言的测验。我为测验和用户结果制作了数据库架构,但不确定如何以良好的方式实现对不同语言的支持。

这就是现在的样子(可以指出设计错误):

* User:
   - id          PK
   - name
   - email
   - password

* Quiz
   - id          PK
   - slug
   - title

* Question
   - id          PK
   - quiz_id     FK
   - question
   - image
   - message

* Option
   - id           PK
   - question_id  FK
   - option
   - is_right

Relation between user and quiz to store results:

* Result
   - id           PK
   - user_id      FK
   - quiz_id      FK

* Result Details
   - id           PK
   - result_id    FK
   - question_id  FK
   - option_id    FK (The option user choose)
   - is_right


数据库设计相同,但表之间的连接清晰:

mysql - 不同语言测验的数据库设计-LMLPHP

我的第一个想法是在测验表中建立一个母语表(语言表有许多测验):

* Language:
   - id          PK
   - language_title

* Quiz
   - id           PK
   - language_id  FK
   - slug
   - title


但这只会创建一个语言类别,管理员将不得不为另一种语言创建一个全新的测验,而不仅仅是添加新的问题文本和选项文本。

如何设计多种语言的测验数据库,以便只有带有文本(标题,消息,问题和选项)的列才需要获取新记录,而不必创建全新的测验?

最佳答案

我会建议以下一般路线:

1)创建一个表(翻译?),其字段为language_id,string_id,value。每个string_id都与特定的消息相对应,与语言无关。因此,所有string_ids x所有language_ids =不同翻译的所有可能消息。因此,(language_id,string_id)是PK,值是测验者应该看到的东西。

2)用string_id替换表格上的每个文本字段。

3)当您的演示环境必须显示一个string_id时,它将从1)中提到的表中选择它。WHERE language_id =您的测验者选择的一个

关于mysql - 不同语言测验的数据库设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51022843/

10-13 02:10