0

我需要为 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)   
    )   ;

想法?

谢谢。

4

2 回答 2

1

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

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

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

于 2012-08-29T01:51:13.660 回答
0

您最简单的方法是定义一个字段id char(8)并使其成为主键。

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

你可以给老师的这个问题的潜在有效答案是:

  1. 如果我们在生产中,我们会测试软件客户端以防止这种情况发生。
  2. 我们可以运行一个日常的生产清除过程来清除带有错误 ID 号的行。
  3. 你到底想要什么?这是两个学分课程的一周作业!我已经给了你一个和大多数工资系统一样好的模式!

说真的,从您最初的问题来看,您的老师并没有坚持让您设计一个执行此特定业务规则的 dbms 模式。但只有你知道是不是这样。

于 2012-08-29T02:45:19.023 回答