将 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 会有一个包含该键的列来查找它。
问题...
我猜这 2 table 格式在查找 AC/DC 的所有歌曲时(假设我有 13,000 条记录)会比如果它正在查看单个 table - 这是正确的还是错误的?
如果我将我的数据分成 2 个 table,我如何循环遍历 "SongName" table 以转换所有实例的值"AC/DC" 到正确的外键“13”,而无需交叉引用并为每个 Band 手动输入它,这将花费很长时间?
我确实有一个单独的列表,其中包含所有乐队名称且没有重复 - 我可以只拥有该 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_songs
和 JOIN
bands
table 对乐队名称进行 INSERT INTO songs SELECT ...
查询。这样你就可以得到正确的引用键 (MySQL - INSERT ... SELECT Syntax)
问题三:table band
我能否只拥有该 varchar 数据列表并将其用作查找该特定艺术家歌曲的主键?
从技术上讲,您可以将它存储在一个列中,但如果您想将信息存储在数据库中,最合乎逻辑的选择是单独的 table 我强烈建议(参见问题 1 的答案)。
我对 mysql 和一般的数据库还很陌生,所以请原谅我的简单性。我有一个包含 13,000 行的 excel/csv 电子表格,其中包含以下字段 "Bandname | Song Title | MP3Link"(不是实际字段,为了说明的目的我对此进行了简化)。
我希望将其转换为 mysql 数据库,这样我就可以在我的网站上按乐队名称分组显示歌曲。显然我有多行来自同一乐队的歌曲数据。
对于一个运行良好的数据库,我猜理想情况下我会有一个单独的 table,里面只有乐队名称(我们称之为 "Bandname" table)和一个自动递增的主键 "bandnameID"。然后我猜测我的 "Songname" table 会有一个包含该键的列来查找它。
问题...
我猜这 2 table 格式在查找 AC/DC 的所有歌曲时(假设我有 13,000 条记录)会比如果它正在查看单个 table - 这是正确的还是错误的?
如果我将我的数据分成 2 个 table,我如何循环遍历 "SongName" table 以转换所有实例的值"AC/DC" 到正确的外键“13”,而无需交叉引用并为每个 Band 手动输入它,这将花费很长时间?
我确实有一个单独的列表,其中包含所有乐队名称且没有重复 - 我可以只拥有该 varchar 数据列表并将其用作查找该特定艺术家歌曲的主键吗?在单个 table 上有什么意义吗?
问题 1:性能和归一化
规范化的主要目标是不是性能而是:
- 避免修改异常
- 更容易扩展
- 可读性
- 更适合各种不同的查询
更多信息:
Wikipedia - Database normalization
How to Deal with SQL Modification Anomalies and Normal Forms
问题二:插入
有很多方法可以做到这一点,这里是一个:
- 将电子表格导入 table,比方说
temp_songs
- 将波段导入
bands
table - 创建一个空 table
songs
withFOREIGN KEY
tobands
- 使用
temp_songs
和JOIN
bands
table 对乐队名称进行INSERT INTO songs SELECT ...
查询。这样你就可以得到正确的引用键 (MySQL - INSERT ... SELECT Syntax)
问题三:table band
我能否只拥有该 varchar 数据列表并将其用作查找该特定艺术家歌曲的主键?
从技术上讲,您可以将它存储在一个列中,但如果您想将信息存储在数据库中,最合乎逻辑的选择是单独的 table 我强烈建议(参见问题 1 的答案)。