首页 > 解决方案 > 什么是更好的做法:存储字符串或使用关系?

问题描述

好吧,我必须自己选择哪种做法更好用。我试图解释我的意思。例如,我有表Songs

Id | Name | Artist | Year
---+------+--------+-------
1  | Ad   | Bad    | 2015
2  | Sad  | ads    | 2011
3  | Wad  | Had    | 2012

而且,我想实现 table Playlists。而且我不完全知道,哪种做法会更好。

方法 #1 - 使用字符串存储歌曲 ID

Playlists桌子:

Id | Name | Songs
---+------+------------------------
1  | Main | 1,2    
2  | GYM  | 4,6,7,8,53,65,76878,78,    
3  | Rock | 121,434,655,6767,78    

因此,为了获取某些播放列表存储的歌曲,我会在每次从 DB 生成列表时对其进行解析。

方法 #2 - 使用多对多关系策略

Playlists桌子:

Id | Name 
---+------
1  | Main 
2  | GYM 
3  | Rock 

PlaylistSongs桌子:

Id | PlaylistId | SongId
---+------------+---------
1  |      1     |    1
2  |      1     |    2    
4  |      1     |  344 
5  |      1     |   45
6  |      1     |   57

方法 3 - 你的建议

如果您知道更好的做法,请随时与我分享:)

感谢关注!

标签: c#sqlsql-server

解决方案


PlaylistSongs-- 多对多关系 -- 是存储数据的正确方式。以下是一些原因:

  • SQL 表中的列应该包含一个值,而不是多个值。
  • 歌曲在不同的播放列表之间共享。他们是他们自己的实体。您还需要有关每首歌曲的其他信息(例如发行时间、类型等)。
  • 数字不应作为字符串存储在关系数据库中;它们应该存储为某种数字类型。
  • 应该在表之间正确声明外键关系。
  • SQL 具有(通常)非常糟糕的字符串解析函数。
  • SQL 可以优化以正确格式存储的数据。

推荐阅读