我是设计数据库的新手。也许这是一个愚蠢的问题,请原谅我。因此,我正在为用户设计数据库。用户填写注册信息后,他将获得唯一的收据编号。所以我的问题是自收到没有。是唯一的,我可以将它用作Users表中的主键,还是应该坚持使用标准方法将userID分配给表中的每一行,并使用userID作为主键?与主键混淆
与主键混淆
回答
如果您的收据没有。够复杂 - 使用数字和字符,或20个数字内置 - 更好地使用替代用户ID
如果收到任何可以是简单的整数,也可以从数据库生成 - 更好地利用用户名和它的值赋给ReceiptNo
如果ReceiptNo是简单整数并且它标识用户和唯一的用户 - 将其用作PKey。
奥列格狗,感谢您的快速回复。我认为使用自动递增的用户标识是更好的主意,因为收据编号将是字母数字和8个字符。 – user1142462 2012-01-11 06:29:42
如果您的收据号码中只包含整数话,可能可以使您的收据,没有现场为自动增加的编号,
收据编号将为字母数字,可能为8个字符。 – user1142462 2012-01-11 06:20:21
所以我认为我应该坚持用户ID作为主键权利? – user1142462 2012-01-11 06:22:37
是的,在这种情况下, – mack 2012-01-11 06:55:14
一个表可以有多个键。如果收据编号是唯一的,并且您希望DBMS将该属性的关键依赖性作为数据完整性约束强制执行,那么您应该将其设置为关键字(由唯一性通过PRIMARY KEY或UNIQUE约束或任何机制来实现您的DBMS提供)。
指定任何一个键为“主”键不是特别重要 - 或者至少它只是你想要的那么重要。真正重要的是您选择的全套关键字。任何关键的要求都是唯一性和不可约性。选择钥匙的明智标准还包括:熟悉,简单和稳定
也许补充说,通常,替代品在熟悉度标准上得分非常接近于零,并且非替代品MIGHT在稳定性标准上的得分很差。 – 2012-01-11 15:30:29
- 1. 与$键混淆
- 2. 外键混淆
- 3. Git与上游主机合并 - 混淆
- 4. 与html2canvas混淆
- 5. 与Queryslice.setrange混淆
- 6. 与mysqli_fetch_array混淆
- 7. 与angularJS混淆
- 8. 与xpath混淆
- 9. 与proguard混淆
- 10. 与IDisposable混淆
- 11. 与Servlets混淆
- 12. 与CreatePolygonRgn混淆
- 13. 与BroadcastReceiver混淆
- 14. 与string.getBytes混淆()
- 15. 混淆两个关键字:__name__与__main__
- 16. Cordova android 5.1.1 APK混淆与proguard混淆
- 17. Elasticsearch主节点混淆
- 18. django +与ORM混淆
- 19. 与混淆矩阵
- 20. .NET混淆与NHibernate
- 21. 与NSindexpathforselectedrow的混淆
- 22. Swift,与UIBarButtonItem混淆
- 23. 与const_cast相混淆
- 24. 与iframe api混淆
- 25. 与fork相混淆()
- 26. 与加密混淆
- 27. 与HTML5 FileReader混淆
- 28. 与Makefile的混淆
- 29. Python:与urljoin混淆
- 30. 与PHP混淆session_regenerate_id
这些收据是什么? – simchona 2012-01-11 06:13:14
用户*是通过他的收据号码识别的?如在:他会保留这个号码,直到时间结束,并且这个号码不会被用于识别这个用户以外的任何目的吗?如果是,请继续。如果不是,请使用满足这些要求的单独用户标识。 – Tomalak 2012-01-11 06:15:08
就像用户填写信息时一样,唯一的收据号码被发送到用户的电子邮件。并使用该收据号码,他可以查看他的订单状态。 – user1142462 2012-01-11 06:17:37