我正在创建一个基于口袋妖怪的数据库,但目前我很难插入具有不同 Action 的口袋妖怪。
每个神奇宝贝都有一套 Action ,所以不仅仅是一个 Action ,而是很多 Action 。然而,当我尝试将具有可变长度移动量的 Pokemon 插入表中时,MySQL 会忽略之前的移动,只插入最后一个移动。
简而言之:如何插入同一 Pokemon 但 Action 不同的多个记录?
[我想一个很好的类似的现实例子是一个拥有多个电子邮件地址的人。我该如何将其插入到表中?]
最佳答案
问题在于,您将其实现为一对一关系,但您拥有的是多对多关系(每个神奇宝贝有许多 Action ,每个 Action 都可以被许多神奇宝贝学习)。
您可能想要做的是有 2 个表。
Table 1: Pokemon
ID, Name, Move1ID, Move2ID, Move3ID, Move4ID, Types etc.
Table 2: Moves
ID, Name, PP, Power, type etc.
然后您可以使用另一个表,其中包含这两个表之间的所有联接信息。您将有多行包含相同的 Pokemon ID 和多行包含相同的 Move ID,但 [Pokemon ID、Move ID] 组合将是唯一的。
Table 3: PokemonMoves
PkID, MoveID
然后您可以通过此关系表从 Pokemon 表到 Moves 表进行连接
SELECT *
FROM Pokemon AS p
LEFT JOIN PokemonMoves AS pm on p.ID = pm.PkID
LEFT JOIN Moves AS m ON m.ID = pm.MoveID
SO 上有很多关于多对多关系的帖子,这看起来是一个很好的起点:Many to many relationship?
关于mysql - SQL - 如何插入同一列具有多个值的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096945/