将varchar值转换为mysql中的主键

时间:2015-04-08 13:20:32

标签: mysql database database-design relational-database

我对mysql和数据库一般都是新手,所以请原谅这个的简单性。我有一个包含13,000行的excel / csv电子表格,其中包含以下字段“Bandname | Song Title | MP3Link”(不是实际字段,我将其简化为插图)。

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

对于运行良好的功能正常的数据库我猜想理想情况下我会有一个单独的表,其中只包含带名(让我们称之为“Bandname”表)和一个自动递增的主键“bandnameID”。然后我猜我的“Songname”表会有一个包含该键的列来查找它。

...问题

  1. 我猜这个2表格格式的表现要快得多(假设我有13,000条记录),当用AC / DC查找所有歌曲时,比通过单个表格查看的情况要好得多 - 这是是正确还是错误?

  2. 如果我将数据分成2个表,如何循环“SongName”表以将所有值为“AC / DC”的实例转换为正确的外键“13”而不交叉 - 为每个乐队手动引用和键入它将永远需要?

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

1 个答案:

答案 0 :(得分:1)

问题1:表现和规范化
规范化的主要目标是性能,但是:

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

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

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

  • 在表格中导入电子表格,我们说temp_songs
  • 将频段导入bands表格
  • 使用songsFOREIGN KEY
  • 创建一个空表bands
  • 使用INSERT INTO songs SELECT ...进行temp_songs查询,并在频段名称上JOIN bands表。这样您就可以正确地获取引用键(MySQL - INSERT ... SELECT Syntax

问题3:表格band
我可以拥有varchar数据列表并将其用作主键来查找该特定艺术家的歌曲吗?

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