电话数据库主键问题

时间:2013-01-16 00:04:15

标签: sql database primary-key composite-key

我正在设计一个数据库,用于存放手机,SIM卡,手机SIM卡配对以及手机SIM卡配对的历史记录。一部手机一次只能与一张SIM卡配对。

我的问题是试图想出一个能够唯一识别手机SIM卡配对的主键。我目前有IMEI和ICCID的* comp(ound | osite)密钥,但这将依赖于用户不添加新条目,这将破坏一个电话一SIM规则。

我可以使用验证在设备-SIM配对表上强制执行此规则,但这是不好的做法?

提前致谢。

*我说这是因为我正在努力记住化合物和复合键之间的区别。

2 个答案:

答案 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号时没有真正的候选键放在适当的位置有很多错误。