如何在PHP中进行限制?

时间:2012-10-12 13:44:46

标签: database-design normalization

我有一个迷你注册系统。

有教授,科目,学生,成绩和有学生的科目的表格。

现在,当你添加教授时,你输入它的教授ID。但也有一个profNO。而profNo是主键。因为你可以向该教授添加更多主题,所以profNo会增加,但ID保持不变。

问题:现在,我想设置一个限制,当一个人想要添加一个教授时,如果他输入一个已经存在的教授ID,就会出现一个错误,上面写着“教授ID已经存在”,但教授ID不是独特。

现在,看看照片。有相同的教授ID和不同的profNo。那是因为他们拥有的主题。当您向教授添加主题时,教授ID会重复。但是当你添加教授时,是否有可能在输入现有ID时会出现错误? sample http://sphotos-e.ak.fbcdn.net/hphotos-ak-ash3/578472_162759700529875_718824031_n.jpg

2 个答案:

答案 0 :(得分:1)

是的,你可以做你所要求的。在插入新教授之前,只需添加一个简单的检查。

提交新教授时的伪代码:

if profID already exists (using a simple SQL query to check)
    allow the insert and continue
else
    don't insert, show a message to the user "That professor ID already exists"
endif

然而,如果教授有多个科目,你一遍又一遍地重复教授的细节,这似乎不是一个非常合乎逻辑的系统。

考虑这个DB结构:

表:professors

字段:idfirstnamelastnamegender

表:subjects

字段:idprofessoridsubjectnamesubjectcode

通过这种方式,您只能在每个教授的professors中保留一条记录,并在主题表中保留相同的记录。插入新主题时,您将填充教授ID,该ID将链接回professors表,而不会复制数据。

这将是一个简单的结构,使您的数据库更高效,现在取决于您的系统需要多么复杂,您可能需要进一步规范化它。例如,如果主题可以有多位教授,那么您不会在主题表中包含教授ID,而是会有一个新表professor_subject_association,其中包含字段professoridsubjectid。将多位教授与学科联系起来。

答案 1 :(得分:0)

让您的ID列具有 UNIQUE INDEX 。阅读有关MySQL手册的内容: Creating Indexes on MySQL