将 varchar 值转换为 mysql 中的主键

Converting varchar values to a primary key in mysql

我对 mysql 和一般的数据库还很陌生,所以请原谅我的简单性。我有一个包含 13,000 行的 excel/csv 电子表格,其中包含以下字段 "Bandname | Song Title | MP3Link"(不是实际字段,为了说明的目的我对此进行了简化)。

我希望将其转换为 mysql 数据库,这样我就可以在我的网站上按乐队名称分组显示歌曲。显然我有多行来自同一乐队的歌曲数据。

对于一个运行良好的数据库,我猜理想情况下我会有一个单独的 table,里面只有乐队名称(我们称之为 "Bandname" table)和一个自动递增的主键 "bandnameID"。然后我猜测我的 "Songname" table 会有一个包含该键的列来查找它。

问题...

  1. 我猜这 2 table 格式在查找 AC/DC 的所有歌曲时(假设我有 13,000 条记录)会比如果它正在查看单个 table - 这是正确的还是错误的?

  2. 如果我将我的数据分成 2 个 table,我如何循环遍历 "SongName" table 以转换所有实例的值"AC/DC" 到正确的外键“13”,而无需交叉引用并为每个 Band 手动输入它,这将花费很长时间?

  3. 我确实有一个单独的列表,其中包含所有乐队名称且没有重复 - 我可以只拥有该 varchar 数据列表并将其用作查找该特定艺术家歌曲的主键吗?在单个 table 上有什么意义吗?

问题 1:性能和归一化
规范化的主要目标是不是性能而是:

  • 避免修改异常
  • 更容易扩展
  • 可读性
  • 更适合各种不同的查询

更多信息:
Wikipedia - Database normalization
How to Deal with SQL Modification Anomalies and Normal Forms

问题二:插入
有很多方法可以做到这一点,这里是一个:

  • 将电子表格导入 table,比方说 temp_songs
  • 将波段导入 bands table
  • 创建一个空 table songs with FOREIGN KEY to bands
  • 使用 temp_songsJOIN bands table 对乐队名称进行 INSERT INTO songs SELECT ... 查询。这样你就可以得到正确的引用键 (MySQL - INSERT ... SELECT Syntax)

问题三:table band
我能否只拥有该 varchar 数据列表并将其用作查找该特定艺术家歌曲的主键?

从技术上讲,您可以将它存储在一个列中,但如果您想将信息存储在数据库中,最合乎逻辑的选择是单独的 table 我强烈建议(参见问题 1 的答案)。