数据库主键和验证

标签 database validation database-design primary-key

'你好,我是一名大学学生,学习计算机专业。我目前正在做我的类(class)作业(这需要创建一个数据库),我希望你能帮我解决一些问题。旁注:不是特定于编程的。

1) 您可以使用字符串作为主键,即 MemberName 吗? 2) 主键名称中是否需要有“ID”? 3) 如果您要使用名称作为主键,您是否能够使用验证技术来确保每个名称都是唯一的?

我目前完成大部分类(class)作业的前提是我可以使用名称作为主键并进行验证以确保它们是唯一的,因为我们在类(class)作业之前创建的示例数据库遵循相同的原则。但是,我的老师(一位新老师)告诉我我需要重做我的作业,我正试图找到一种方法来避免重做所有事情,因为我已经查阅了我们的学习资源并且无法找出必须将整数用作主键的任何原因或无法使用验证的任何原因。

最佳答案

这里有一些快速的答案

  1. 您可以使用字符串作为主键,但这通常不是一个好主意。主键通常被索引,使用数值通常意味着您的主键在字节方面更小,因此在创建索引时占用更少的存储空间,并在连接期间或作为可能创建的其他索引的一部分执行得更快。在可以改变的东西上定义一个键通常也是一个坏主意。如果您在 MemeberName 上定义了一个键并且用户想要更改它,那么由于其他表可能将您的 MemberName 主键作为该表中的外键引用,因此很难进行更改。

  2. 列的名称对其是否可以定义为主键没有影响。您甚至可以将多个列定义为主键(称为复合主键),只要列的集合产生唯一的记录即可。

  3. 尝试插入重复的主键时,数据库会给您一个错误,但如果使用基于数据输入的字符串值,您最好在插入前检查它是否存在。

关于数据库主键和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26742083/

相关文章:

mysql - 如何优化由于 ORDER BY RAND() 导致的缓慢 MySQL 查询?

c# - 我在我的应用程序中更改了一个值,但没有在我的数据库中更新

node.js - 使用 Express,我可以自动修剪 req.body 中所有传入的 POSTed 字段吗?

database - 一种数据库设计技术

SQL 从表中选择行并更新相同的行

database - 如何在没有性能和可扩展性问题的情况下审计数据库事件?

jquery - 任何没有谷歌账户的 GAE 用户注册表的 gae 框架

javascript - 嵌套对象事件

database - 仅通过矩阵转置内存不足

MongoDB 事件驱动数据库设计