我正在设计一个数据库来保存手机、SIM 卡、手机-SIM 配对以及手机-SIM 配对历史。一部手机一次只能与一张 SIM 卡配对。
我的问题是试图考虑一个唯一标识电话-SIM 配对的主键。我目前有一个 IMEI 和 ICCID 的 *comp(ound|osite) 密钥,但这将依赖于用户不添加会破坏一个电话一个 SIM 规则的新条目。
我可以使用验证在设备-SIM 配对表上强制执行此规则,但这是不好的做法吗?
提前致谢。
*我这样说是因为我目前正在努力记住复合键和复合键之间的区别。
我正在设计一个数据库来保存手机、SIM 卡、手机-SIM 配对以及手机-SIM 配对历史。一部手机一次只能与一张 SIM 卡配对。
我的问题是试图考虑一个唯一标识电话-SIM 配对的主键。我目前有一个 IMEI 和 ICCID 的 *comp(ound|osite) 密钥,但这将依赖于用户不添加会破坏一个电话一个 SIM 规则的新条目。
我可以使用验证在设备-SIM 配对表上强制执行此规则,但这是不好的做法吗?
提前致谢。
*我这样说是因为我目前正在努力记住复合键和复合键之间的区别。
如果您想要在同一张表中的配对历史。然后身份主键将完成这项工作
毕竟我可以把我的sim卡从phone1移到phone2,然后再移回phone1。
这有点调皮,因为重新键入表格可能会将您带入另一个宇宙……有一个隐含的假设,即 pair_id 在时间维度上增加。可以通过对表进行 CRUD 访问的任何东西破坏的东西。
您可以添加一个日期时间 date_paired,但如果我很快交换我的模拟人生......两张桌子的好时机,我认为当前和历史。
我的问题是试图考虑一个唯一标识电话-SIM 配对的主键。我目前有一个 IMEI 和 ICCID 的 *comp(ound|osite) 密钥,但这将依赖于用户不添加会破坏一个电话一个 SIM 规则的新条目。
好吧,您并没有说要求是一部手机对一张 SIM 卡。您说,“一部手机一次只能与一张 SIM 卡配对”。(强调补充。)
这对列 IMEI 和 ICCID听起来像是这个表的一个很好的候选键。(我相信你的话;我对手机和 SIM 卡了解不多。)如果你首先允许用户输入数据,你必须有一些业务流程——可能在应用程序代码中实现,或者SQL——允许更新,无论规则是“一部手机/一张 SIM”还是“一次一部手机/一张 SIM”。
为什么?这些值很难正确输入。
在放置真正的候选键后添加代理 ID 号没有任何问题。在没有放置真正的候选键的情况下添加代理 ID 号有很多错误。