我需要为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)
) ;
思想?
感谢。
答案 0 :(得分:1)
您不应该在数据库层中进行数据验证。您还要创建一个复合键,这会增加额外的不必要的开销。如果在某些时候您需要调整或放宽规则,则需要重新定义数据库模式。
这在检索数据和组装实际学生标识符时也会带来无意义的复杂性。除非你有充分的理由将它们分开,否则请将它们放在一起。
只需使用一列并强制执行应用程序中的内容即可。即使是非常基本的ORM也能让你做到这一点。
答案 1 :(得分:0)
这里最简单的方法是定义一个字段id char(8)
并将其作为主键。
打开的问题(老师可能会问的问题)是“如果某个流氓软件客户端插入不符合您业务规则的'K1234567','DEADBEEF'或'I123'等ID,会发生什么?对于id值?“
这个问题的潜在有效答案供您给老师:
说真的,您的原始问题并不是您的老师坚持要求您设计一个强制执行此特定业务规则的dbms架构。但只有你知道是否是这种情况。