Database 在Access 2007中是否有方法使多个列唯一?

Database 在Access 2007中是否有方法使多个列唯一?,database,ms-access,ms-access-2007,unique-constraint,Database,Ms Access,Ms Access 2007,Unique Constraint,我目前正试图为我工作的地方建立一个数据库。我们在系统中输入了部分社会保险号码,以便将用户分开,这样我们就知道谁是谁,我正试图找出是否有办法让这更容易。我们正在寻找一种方法来防止人们使用彼此的社会保障卡(确实发生了这样的事情),所以虽然我知道如何使单个列唯一,但我想知道是否有一种方法可以使所有SSN列都是唯一的,因为会有多个 主SSN 配偶的SSN 儿童SSN 有时会有七到八个孩子,他们都必须单独列在一列。那么,有没有办法使所有这些SSN列彼此唯一?如果不在Access中,是否有这样的程序?我们目

我目前正试图为我工作的地方建立一个数据库。我们在系统中输入了部分社会保险号码,以便将用户分开,这样我们就知道谁是谁,我正试图找出是否有办法让这更容易。我们正在寻找一种方法来防止人们使用彼此的社会保障卡(确实发生了这样的事情),所以虽然我知道如何使单个列唯一,但我想知道是否有一种方法可以使所有SSN列都是唯一的,因为会有多个

主SSN 配偶的SSN 儿童SSN


有时会有七到八个孩子,他们都必须单独列在一列。那么,有没有办法使所有这些SSN列彼此唯一?如果不在Access中,是否有这样的程序?我们目前正在使用MyDatabase,但我还没有找到一种方法使其具有唯一性。

你走错了方向。如果你有一个有19个孩子的家庭呢?您将需要21个SSN列。当一个比您的设计更大的族出现时,您真的想修改所有表单和报表吗

唯一性问题:

  • 您不能简单地在所有SSN列上定义一个唯一的多列索引并调用它。考虑序列:[a],[a,b],[a,b,c]。这些在你的索引中都是独一无二的,但是很明显A和B被复制了,这与你的愿望相反
  • 好的,那么如果您尝试使用带有联接的查询来解决8SSN列唯一性问题,该怎么办?为了验证主SSN是唯一的,您必须加入用户表7次:MainSSN->peopsessN->Child1SSN->……->儿童8ssn。1000行表上的笛卡尔乘积经过7次合并后将是
    1.0*10^21
    行比较。为所有8列编制索引可能会稍微加快速度,但代价是大大增加存储空间,大大降低插入和更新速度
  • 而且,在所有这些努力之后,您仍然没有确定配偶SSN是否在子女SSN中重复!为了完整性,您必须检查Child1与Children2-8、Child2与Children3-8等
  • 简言之,在8列中强制唯一性是不切实际的,更不用说合理的最大值,如21列

    旁白:以未加密格式存储部分社会保险号码也可能是个坏主意。这使得唯一性检查更容易失败,而且可能违反了法规

    我建议的解决方案:

    这是一个数据设计问题。我的建议是,不要水平(添加更多列),而是垂直(添加包含更多行的相关表)。 对于您的主桌,我建议:

    Table: Patrons
    ==============
    Field       | Type        | Comment
    ------------------------------------------
    PatronID    | AutoNumber  | Primary Key
    PatronSSN   | String      | SSN Digest
    
    然后,您的配偶表:

    Table: PatronSpouses
    ====================
    Field           | Type        | Comment
    ------------------------------------------------------
    PatronSpouseID  | AutoNumber  | Primary Key
    PatronID        | Long        | Foreign Key to Patrons
    SpouseSSN       | String      | SSN Digest
    
    最后,您的子女表:

    Table: PatronChildren
    =====================
    Field          | Type        | Comment
    ------------------------------------------------------
    PatronChildID  | AutoNumber  | Primary Key
    PatronID       | Long        | Foreign Key to Patrons
    ChildSSN       | String      | SSN Digest
    
    现在,定义索引:

    Table.Field             | Index Type
    -----------------------------------------
    Patrons.PatronSSN         (unique)
    PatronSpouses.SpouseSSN   (unique)
    PatronChildren.ChildSSN   (unique)
    
    接下来,定义表关系:

    Foreign Table.Field     ==> Primary Table.Field   Relationship
    --------------------------------------------------------------
    PatronSpouses.PatronID  ==> Patrons.PatronID      (1 to 1)
    PatronChildren.PatronID ==> Patrons.PatronID      (1 to Many)
    
    优点:

  • 您可以对每个表中的所有SSN进行自动唯一性检查
  • 您可以通过连接表各自的SSN字段,轻松地交叉检查表之间的SSN
  • 唯一性检查永远不会比1更复杂。二,
  • 执行第1条。自动发生在表级别。2的强制执行仍然发生在代码/查询级别
  • 您的表单和报表现在可以处理任意数量的子项,无需进一步修改。诚然,最初的设计会变得更加复杂,但当一个特别大的家庭走进来时,你永远不会被迫改变它