我目前正在计划开发一个音乐流应用程序。我想知道什么作为服务器上表中的主键会更好。 ID int 或唯一字符串。
方法一:
歌曲表:SongID(int)、标题(string)、*艺术家**(string)、长度(int)、*专辑**(string)
流派表Genre(字符串),名称(字符串)
歌曲类型:
***歌曲ID****(整数),***流派****(字符串)
Method 2
歌曲表:SongID(整数),标题(字符串),*艺术家ID **(整数),长度(整数),*专辑ID **(整数)
流派表GenreID(整数),名称(字符串)
歌曲类型:
***歌曲ID****(int),***流派ID****(int)
Key: Bold= 主键,*字段** = 外键
我目前正在使用方法 2 进行设计,因为我相信它会加快查找性能并使用更少的空间,因为 int 比字符串占用的空间要少得多。
有什么理由这不是一个好主意吗?有什么我应该注意的吗?
有什么理由这不是一个好主意吗?有什么我应该注意的吗?
是的。如果您需要唯一地标识单个数据库之外的相同数据,则整数 ID 非常糟糕。例如,如果您必须将相同的数据复制到另一个具有可能预先存在的数据的数据库系统中,或者您有一个分布式数据库。最需要注意的是像这样的整数7481
在该数据库之外没有任何意义。如果以后您需要扩展该数据库,那么如果不通过手术删除数据,这可能是不可能的。
另一件需要记住的事情是整数 ID 不那么灵活,因此它们不能轻松地用于特殊情况。互联网协议的设计者了解这一点,并采取了预防措施,以某种方式将某些数字块分配为“特殊”(广播 IP、私有 IP、网络 IP)。但这是可能的,因为有一个protocol围绕这些数字的使用。许多数据库并不在如此定义明确的协议内运行。
FWIW,这有点像试图决定“强类型”编程范例是否比“弱/动态类型”编程范例更好。这将取决于您需要做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)