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

时间:2012-08-29 01:45:35

标签: mysql primary-key composite-key

我需要为ID为M或I的学生创建一个表格,然后是7位数字。我想创建一个表,一个字段选择字母M或I,第二个字段是7位数。然后我会用它们来创建一个复合主键。但我不认为这就是我在寻找的东西。我想要一个学生证的专栏。

这是我到目前为止所做的:

   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)   
    )   ;

思想?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

这里最简单的方法是定义一个字段id char(8)并将其作为主键。

打开的问题(老师可能会问的问题)是“如果某个流氓软件客户端插入不符合您业务规则的'K1234567','DEADBEEF'或'I123'等ID,会发生什么?对于id值?“

这个问题的潜在有效答案供您给老师:

  1. 如果我们正在制作中,我们会测试软件客户端以防止这种情况发生。
  2. 我们可以运行每日生产清除流程来清除ID格式错误的行。
  3. 你想要什么?这是两个学分课程的一周作业!我已经为您提供了一个与大多数薪资系统一样好的架构!
  4. 说真的,您的原始问题并不是您的老师坚持要求您设计一个强制执行此特定业务规则的dbms架构。但只有你知道是否是这种情况。