我创建了一个简单的asp.net表单,允许用户查看培训的日期列表并注册该日期,他们手动输入他们的名字和employeeid(我不想让dulpicate员工ID),每个日期对应对于训练(表中的唯一id),这将被插入具有以下结构的表中:
tbl_emptraining
trainig_id ( which is unique)
trainingDate
employeename ( which is unique)
employeeID (entered ) needs to be unique on each trainig_id and unique for all different training ids..
如何防止员工在Sql数据库中注册重复的trainig ID。我想发一个事件,消息可以成功地显示给用户,该员工已经注册了培训.. ???
答案 0 :(得分:1)
两种方法可以做到这一点......
在两列的组合上添加唯一(可以是非聚集的)索引(这也使得通过trainID / empID更快地搜索)
使用唯一约束(http://www.w3schools.com/sql/sql_unique.asp)
ALTER TABLE [TableName]
ADD CONSTRAINT uc_PersonTrainID UNIQUE (training_id, employee_id)
您还提到员工姓名是唯一的......您可能想重新考虑一个......有一些非常常见的名称。
如果有帮助,请评价。
答案 1 :(得分:0)
根据您使用的SQL Server版本,您可以使用merge语句,如果未满足某些条件,则会插入记录(通常称为upsert语句)。如果你不能使用merge语句,你可以编写自己的upsert存储过程。
答案 2 :(得分:0)
用户如何选择培训ID?如果存在某种下拉列表,则只选择那些符合条件的培训条目(此类培训和数据库中的用户尚未有培训记录)。然后,他们不会选择无法保存的东西。
答案 3 :(得分:0)
如果我正确理解您的问题,您可以设置多列主键。使用training_id和employeeID。这将只允许为每个training_id输入一次employeeID“12345”。
答案 4 :(得分:0)
首先,您应该确保数据库具有正确的约束。在这种情况下,employeeID字段上的唯一索引和employeeName上的唯一约束可能是正确的。
然后,在您的业务逻辑(.net代码,但为此创建一个定义的层有用)中,您将检查数据库以查看employeeName是否已存在。如果名称已存在,则返回消息。
最后,您可以使用一些javascript以与上面相同的方式对数据库进行实时调用,但这是可选的。
另外,看看你写的内容,看来你的数据库架构可能会更好,培训和员工之间存在多对一的关系。