我正在用一个名为RFC的用户识别的用户编写程序。在墨西哥,这个RFC是一个13个字符的字符串,用于识别我国的纳税人。在整个国家,没有人拥有相同的RFC,所以我认为这将是一个完美的自然主键。此RFC将在其他表中用作外键。
问题是,我关注系统性能。您认为使用与每个RFC关联的自动递增整数值会更好吗?
干杯!
答案 0 :(得分:8)
在担心性能之前,请考虑隐私。墨西哥的RFC是否像美国的社会保障一样?如果是这样,你肯定不想建立一个依赖它的系统,因为你可能被迫以不同的方式处理它/加密它等。
我建议使用自动加密整数密钥,并根据您的隐私需求存储RFC。
答案 1 :(得分:4)
我的想法是任何受政治突发事件影响的事情,包括“哇,永远不会有超过一个人使用这个数字”是创建你自己的主键(自动增量int)的红旗。
答案 2 :(得分:1)
您确定只有墨西哥纳税人才会成为这个系统的用户吗?也就是说,您确定现在和将来只有拥有RFC的个人才会成为该系统的用户吗?
由于这个原因和(不太重要)出于性能原因,我想我会选择自动增量整数ID。
答案 3 :(得分:1)
作为一般规则,我更喜欢使用自动递增整数作为行ID作为主键和外键。这并不是说你不会在RFC上编制索引以便快速搜索。但是你可能会遇到RFC不正确并且需要更改的情况......如果它是主键和外键,那么它必须在整个地方进行更改。
使用自动递增整数不会更改查询的内容,实际上,小尺寸(字符)数字可能会使调试更容易。
答案 4 :(得分:0)
在西班牙,似乎有大约105,000人与其他人共享相同的“唯一”身份证号码(人口约为45,000,000)。当人们死亡时,他们的ID号可能会被重复使用,因此这可能也是您数据集的问题。然后有些人根本没有身份证号码。
我亲自去UUIDs。但是别忘了写一些测试:最近我被Python 2.5中的implementation bug咬了。
答案 5 :(得分:0)
这实际上是一个信息需求问题,而不是数据库设计问题 您是否需要通过RFC识别相关人员?您是否需要输入没有RFC或已将RFC分配给之前输入的其他人的人?
或者您是否可以自由地制定自己的要求?
一旦了解了要求,设计就会相当容易。
答案 6 :(得分:0)
您声明“在全国范围内,没有人拥有相同的RFC”。一个人有可能在其一生中拥有多个RFC吗?不确定墨西哥,但在新西兰,我们的税务部门在宣布破产时向他们发出新的税号。这意味着他们有2个或更多的数字。还有别的东西供您检查。