我正在设计一个数据库,用于存放手机,SIM卡,手机SIM卡配对以及手机SIM卡配对的历史记录。一部手机一次只能与一张SIM卡配对。
我的问题是试图想出一个能够唯一识别手机SIM卡配对的主键。我目前有IMEI和ICCID的* comp(ound | osite)密钥,但这将依赖于用户不添加新条目,这将破坏一个电话一SIM规则。
我可以使用验证在设备-SIM配对表上强制执行此规则,但这是不好的做法?
提前致谢。
*我说这是因为我正在努力记住化合物和复合键之间的区别。
答案 0 :(得分:1)
如果您想在同一张表中找到配对历史记录。 然后身份主键将完成工作
毕竟我可以将我的SIM卡从phone1移动到phone2然后再回到phone1。
这有点调皮,因为重新键入桌子会让你进入另一个宇宙...... 隐含的假设是pair_id在时间维度上增加。 任何有CRUD访问权限的东西都可能破坏的东西。
您可以添加日期时间date_paired,但如果我很快交换了我的SIM卡... 我认为两个表,现在和历史的好时机。
答案 1 :(得分:1)
我的问题是试图想出一个唯一的主键 识别手机SIM卡配对。我现在有一个* comp(ound | osite) IMEI和ICCID的关键,但这不依赖于用户 添加一个新条目会破坏一个电话 - 一个SIM规则。
嗯,你没有说要求是一部SIM卡的手机。你说,“一部手机只能与一张SIM卡一起配对。” (重点补充。)
这对列IMEI和ICCID 听起来像这个表的精细候选键。 (我接受你的意思;我对手机和SIM卡的了解不多。)如果你允许用户首先输入数据,你必须有一些业务流程 - 可能是在应用程序代码中实现的SQL - 允许更新,无论规则是“一个电话/一个SIM”还是“一次一个电话/一个SIM”。
为什么呢?这些值很难正确输入。
在真实的候选键到位后,添加代理ID号并没有错。添加代理ID号时没有将真正的候选键放在适当的位置有很多错误。