每个用户/个人都可以知道一种或多种语言。
我能想到的只是一张像
这样的表格+----------+------+-----+------------+-----+-----+-----+-------+
| PersonID | Java | PHP | Javascript | C++ | C | CSS | HTML |
+----------+------+-----+------------+-----+-----+-----+-------+
| 1 | Yes | Yes | No | Yes | No | Yes | No |
| 2 | No | Yes | Yes | No | Yes | No | No |
| 3 | Yes | No | Yes | Yes | Yes | Yes | No |
+----------+------+-----+------------+-----+-----+-----+-------+
考虑到我所有语言都需要至少100列,拥有那么多列是正常的吗?有些东西告诉我这是错误的方法。
非常感谢,对我的英语感到抱歉!
答案 0 :(得分:2)
我建议你创建三个表。
一个表包含人物的信息,如他的姓名等。
第二个表包含两列LanguageId和Language name。
+------------+-----------+
| LanguageID | Name |
+------------+-----------+
| 1 | Javascript|
| 2 | C |
| 3 | C++ |
+------------+-----------+
第三个表包含Id,PersonId,LanguageID。在此表中,您可以加入上述两个表记录。
+---+----------+------------+
|ID | PersonID | LanguageID |
+---+----------+------------+
|1 | 1 | 1 |
|2 | 2 | 2 |
|3 | 3 | 3 |
+---+----------+------------+
支持我答案的理由:
答案 1 :(得分:1)
我们可以对Rahul Tripathi的反应做一点改进就是删除“已知”专栏。在这种情况下,您只需要两个表。一个包含PersonId和LanguageId的人知道。第二个表仅适用于语言。
您可以通过加入两个表来了解一个人所知道的语言。例如,如果您需要知道可以执行的已知语言列表:
SELECT p.PersonId, l.Name
FROM Person p INNER JOIN Language l ON (p.LanguageId = l.LanguageId)
WHERE (p.PersonId = theIdYouNeedToKnow)