我正在创建一个设备管理系统,其中所有设备(如手机,PDA,计算机等)都链接到“所有者”。在SQL表中更改主键
设置tbldevice我发现我没有从所有设备上获取IMEI号码,有的只显示序列号,有的甚至没有这些。
当我将已经使用的设备插入表格中时,我没有包装,通常可以找到序列号。
但我想用序列号或IMEI作为PK来避免重复。现在我有两个字段s/n和IMEI。由于上述原因,我无法组合PK。
任何想法我应该如何设置一个合适的PK?
我正在创建一个设备管理系统,其中所有设备(如手机,PDA,计算机等)都链接到“所有者”。在SQL表中更改主键
设置tbldevice我发现我没有从所有设备上获取IMEI号码,有的只显示序列号,有的甚至没有这些。
当我将已经使用的设备插入表格中时,我没有包装,通常可以找到序列号。
但我想用序列号或IMEI作为PK来避免重复。现在我有两个字段s/n和IMEI。由于上述原因,我无法组合PK。
任何想法我应该如何设置一个合适的PK?
也许添加列装满
nvl(SN,'##SN##') || nvl(IMEI,'#IMEI#')
和一些逻辑来填补它的时候更新/插入表。如果它们是数字,也许有可能用一些未使用的数字替代丢失的数字,如
nvl(SN,9999999999) || nvl(IMEI,9999999999)
在列上创建主键。
如果您还没有IMEI号码和序列号无法识别手机/ PDA,那么您需要IMEI和/或序列号,并且两者都必须是唯一的。
并且可以结合使用IMEI和序列号做单个主键,并且有一个技巧:如果没有IMEI用不与现有IMEI值冲突的唯一值填充,如独特的数字或连接随机和时间戳;和序号相同的行为。
然后IMEI和序列号没有空值都不重复,你可以做你的组合主键。
这不会阻止重复!第二次你想要插入同一个设备时,你只需要s/n或者IMEI,但是使用任何随机数字都不能阻止插入。 Michael – mak
当然,您需要一些逻辑来验证某些IMEI和/或序列号是否已经注册(可以为IMEI和其他序列号创建唯一索引)。我只想在一个可行的解决方案中将组合信息保存为主键。你也可以在两列中都允许空值,并用组合键来创建主键;那么如果您尝试在没有序列号的情况下插入两次相同的IMEI,数据库不允许;但是如果存在一个IMEI并且尝试添加他的序列号,则需要一些逻辑来控制更新。 –
自动生成的ID很方便。结合独特的约束。 – jarlh
自动生成的ID已在使用中。 s/n加上IMEI的组合,即使其中一个有NULL值似乎可以解决我的问题。到后期阶段,用户不太可能检索缺失的值,无论是s/n还是IMEI,因为否则就不会违反唯一密钥。谢谢你回复。 Michael – mak
你正在使用哪些DBMS? –