mysql - 创建一个学生ID以字母开头的表 - mysql

标签 mysql primary-key composite-key

我需要为学生创建一个表格,其 ID 以 M 或 I 开头,然后是 7 位数字。我考虑创建一个表,其中一个字段选择字母 M 或 I,第二个字段选择 7 位数字。然后我将使用它们来创建复合主键。但我不认为这就是我要寻找的。我想要一栏用于学生 ID。

这是我到目前为止所拥有的:

   create table student(    
       student_id_first ENUM('M', 'I')  
       , student_id_digits  char(8) not null    unique  
       , first_name varchar(50)
       , last_name   varchar(50)    
       , Primary Key(student_id_first, student_id_digits)   
    )   ;

想法?

谢谢。

最佳答案

您不应该将数据验证放在数据库层中。您还创建了一个复合键,这会增加额外的、不必要的开销。如果在某些时候您需要调整或放宽规则,则需要重新定义数据库架构。

在检索数据并必须组装实际的学生标识符时,这也会带来毫无意义的复杂性。除非您有充分的理由将它们分开,否则请将它们放在一起。

只需使用一列并强制执行应用程序中的内容。即使是非常基本的 ORM 也能让您做到这一点。

关于mysql - 创建一个学生ID以字母开头的表 - mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169838/

相关文章:

grails - Grails复合ID抛出NullPointerException

php mysql 和 javascript 加载冲突

MySQL InnoDB : autoincrement non-primary key

mysql - 如何使用 Rails ActiveRecord 迁移将主键插入 MySQL 数据库?

python - 在 SQLAlchemy-ORM 中查询组合键

java - Hibernate 不接受 ManyToOne 作为 Id

php - 如何使用 PHP 和 MySQL 删除图像?

php - 文件上传时,重复的空行输入到 mysql 中

PHP 获取数据两次

sql - 在 SQL 中将数据从一个数据库导出到另一个数据库时忽略重复的主键