假设我有一个具有以下结构的课程表。
courses (Primary keys: (id) )
+-------+--------------------+
| id | name |
+-------+--------------------+
| 1 | Chinese - English |
| 2 | Japanese - English |
| 3 | Chinese - Spanish |
+-------+--------------------+
课程将具有这样的列。
course_columns (Primary keys: (id), Indexes: (course_id) )
+-------+-----------+----------+
| id | course_id | title |
+-------+-----------+----------+
| 1 | 1 | Chinese |
| 2 | 1 | English |
| 3 | 1 | Pinyin |
| 4 | 2 | Japanese |
| 5 | 2 | English |
| 6 | 2 | Kana |
| 7 | 2 | Romaji |
| 8 | 3 | Chinese |
| 9 | 3 | Spanish |
+-------+-----------+----------+
最后,课程将带有这样的单词
course_word_data (Primary Keys: (id, column_id) )
+------+-----------+-----------+
| id | column_id | content |
+------+-----------+-----------+
| 1 | 1 | 你好 |
| 1 | 2 | hello |
| 1 | 3 | nĭ hăo |
| 2 | 1 | 谢谢 |
| 2 | 2 | goodbye |
| 2 | 3 | xièxie |
| 3 | 4 | 好む |
| 3 | 5 | to prefer |
| 3 | 6 | このむ |
| 3 | 7 | konomu |
| 4 | 8 | 你好 |
| 4 | 9 | hola |
+------+-----------+-----------+
现在让我说,在数据库方面,我几乎是一个新手,最近几天,我一直在考虑如何更好地进行设计。用例场景如下:
此外,如果课程中的某个单词是由课程所有者编辑的,则该单词应特定于课程,并且不会影响其他课程。
这是我的问题:
这是一个好的数据库设计吗?我的问题是,如果一门课程中有十列,则意味着Course_word_data表中有一个单词有十行。基本上对于m列和n个单词,单个课程有m * n行。假设有5000个课程,每个课程的平均列数为6。如果每个课程平均有1000个单词,则意味着有5000 * 6 * 1000 = 3000万行。这样设计可以吗,还是应该重新考虑设计?有什么更好的方法呢?
是否可以减少重复单词的数量?如您所见,表中两次出现“你好”一词。有减少它的有效方法吗?
课程示例(将其视为网页上的网格元素)
+------------+--------------+--------------+
| English | Pinyin | Chinese |
+------------+--------------+--------------+
| hello | nĭ hăo | 你好 |
| goodbye | xièxie | 谢谢 |
+------------+--------------+--------------+
(Columns can be added or removed by the user.
For example part of speech column which indicates
whether a column is noun, ver, adjective etc. )
我对问题的长度表示歉意。
答案 0 :(得分:0)
在此处调用关注点分离原则; HTML表(视图)与数据库表(持久性)不同。
视图上下文中的“用户添加列” 等同于查询上下文中的“用户选择列” 。用户应该创建语言吗?也许没有,语言已经在那里。
旁注:在翻译问题中,单词上下文很有用。