代码之家  ›  专栏  ›  技术社区  ›  expora

你认为这是一个自然的主键吗?

  •  4
  • expora  · 技术社区  · 14 年前

    我正在写一个程序,用户通过一个名为RFC的id来识别。在墨西哥,这个RFC是一个13字符字符串用于识别我国纳税人。在整个国家,没有人有相同的RFC,所以我认为这将是一个完美的自然主键。此RFC将在其他表中用作外键。

    问题是,我关心的是系统性能。您认为最好使用与每个RFC关联的自动递增整数值吗?

    干杯!

    7 回复  |  直到 14 年前
        1
  •  8
  •   n8wrl    14 年前

    在你担心表现之前,先考虑一下隐私。墨西哥的RFC像美国的社会保障吗?如果是这样,你肯定不想建立一个依赖于它的系统,因为你可能会被迫对它进行不同的处理/加密等。

    我建议您使用一个自动增加整数键,并根据您的隐私需要存储RFC。

        2
  •  4
  •   Marc B    14 年前

    我的想法是,任何受政治奇想影响的东西,包括“哇,永远不会有超过一个人使用这个数字”都是创建自己的主键(自动递增int)的红旗。

        3
  •  1
  •   Hammerite    14 年前

    你肯定只有墨西哥纳税人才是这个系统的使用者吗?也就是说,你确定现在和将来只有拥有RFC的个人才是这个系统的用户吗?

    出于这个原因和(不太重要)出于性能的原因,我想我会选择一个自动递增的整数I d。

        4
  •  1
  •   Thanatos    14 年前

    作为一般规则,我更喜欢使用自动递增整数作为行id作为主键和外键。这并不是说你不会为快速搜索而在RFC上建立索引。但是你可能会遇到RFC不正确并且需要更改的情况。。。如果它是主键和外键,那么它就必须到处更改。

    使用一个自动递增的整数不会改变查询的外观,从实用的角度来看,较小的(字符)数字可能会使调试更容易。

        5
  •  0
  •   Carlos Valiente    14 年前

    似乎在西班牙 105,000 与他人共享同一“唯一”身份证号码的人(在约45000000人口中)。当人们死亡时,他们的ID号可能会被重用,所以这也可能是数据集的问题。还有一些人根本没有身份证号码。

    我个人认为 UUIDs . 但别忘了写些测试:最近我被 implementation bug 在Python2.5中。

        6
  •  0
  •   Walter Mitty    14 年前

    这实际上是一个信息需求问题,而不是数据库设计问题。
    您是否需要通过RFC确定相关人员?您是否需要输入没有RFC或其RFC已分配给先前输入的其他人的人员?

    或者你可以自己提出要求吗?

    一旦你知道了需求,设计就会相当容易地进行。

        7
  •  0
  •   David FreemanDavid Freeman    14 年前

    你说“在整个国家,没有人有相同的RFC”。一个人一生中是否有可能拥有不止一个RFC?不确定墨西哥,但是在NZ,我们的税务部门在宣布破产时发给一个人一个新的税号。这意味着他们有2个或更多的数字。只是一些别的东西让你检查一下。