我正在尝试进行一次支持多种语言的测验。我为测验和用户结果制作了数据库架构,但不确定如何以良好的方式实现对不同语言的支持。
这就是现在的样子(可以指出设计错误):
* 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
数据库设计相同,但表之间的连接清晰:
我的第一个想法是在测验表中建立一个母语表(语言表有许多测验):
* 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/