这对 table 来说是一个好的设计吗?
Is this a good design for a table?
每个 user/person 人都可以掌握一种或多种语言。
我能想到的就是table喜欢
+----------+------+-----+------------+-----+-----+-----+-------+
| 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 列,那么多列是否正常?有些东西告诉我这是错误的方法。
非常感谢你,对不起我的英语!
我建议您创建三个 table。
一个 table 包含此人的信息,如姓名等
第二个 table 包含两列 LanguageId 和语言名称。
+------------+-----------+
| LanguageID | Name |
+------------+-----------+
| 1 | Javascript|
| 2 | C |
| 3 | C++ |
+------------+-----------+
第三个table 包含Id、PersonId、LanguageID。在这个table你可以加入上面两个table的记录。
+---+----------+------------+
|ID | PersonID | LanguageID |
+---+----------+------------+
|1 | 1 | 1 |
|2 | 2 | 2 |
|3 | 3 | 3 |
+---+----------+------------+
支持我回答的理由:
- 将来如果您想在 table 中添加任何新语言,那么它
将其添加到主要 table.
中会更容易
- 您可以轻松加入两个 table 并获得结果
我们可以对 Rahul Tripathi 的回复做一点改进,就是删除 "Known" 列。对于这种情况,您只需要两个 table。一个包含此人知道的 PersonId 和 LanguageId。第二个 table 仅适用于语言。
加入两个table,您就知道一个人会说什么语言。例如,如果您需要了解已知语言的列表,您可以执行以下操作:
SELECT p.PersonId, l.Name
FROM Person p INNER JOIN Language l ON (p.LanguageId = l.LanguageId)
WHERE (p.PersonId = theIdYouNeedToKnow)
每个 user/person 人都可以掌握一种或多种语言。
我能想到的就是table喜欢
+----------+------+-----+------------+-----+-----+-----+-------+
| 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 列,那么多列是否正常?有些东西告诉我这是错误的方法。
非常感谢你,对不起我的英语!
我建议您创建三个 table。
一个 table 包含此人的信息,如姓名等
第二个 table 包含两列 LanguageId 和语言名称。
+------------+-----------+
| LanguageID | Name |
+------------+-----------+
| 1 | Javascript|
| 2 | C |
| 3 | C++ |
+------------+-----------+
第三个table 包含Id、PersonId、LanguageID。在这个table你可以加入上面两个table的记录。
+---+----------+------------+
|ID | PersonID | LanguageID |
+---+----------+------------+
|1 | 1 | 1 |
|2 | 2 | 2 |
|3 | 3 | 3 |
+---+----------+------------+
支持我回答的理由:
- 将来如果您想在 table 中添加任何新语言,那么它 将其添加到主要 table. 中会更容易
- 您可以轻松加入两个 table 并获得结果
我们可以对 Rahul Tripathi 的回复做一点改进,就是删除 "Known" 列。对于这种情况,您只需要两个 table。一个包含此人知道的 PersonId 和 LanguageId。第二个 table 仅适用于语言。
加入两个table,您就知道一个人会说什么语言。例如,如果您需要了解已知语言的列表,您可以执行以下操作:
SELECT p.PersonId, l.Name
FROM Person p INNER JOIN Language l ON (p.LanguageId = l.LanguageId)
WHERE (p.PersonId = theIdYouNeedToKnow)