我目前正在尝试为我工作的地方建立一个数据库。我们将部分社会安全号码放入系统以使顾客分开,这样我们就知道谁是谁,我想知道是否有办法让这更容易。我们正在寻找一种方法来阻止人们使用彼此的社会保障卡[确实发生了什么事情],所以当我理解如何使单个列独特时,我想知道是否有办法使它成为所有的SSN列将是唯一的,因为会有多个。
主要SSN 配偶的SSN 儿童的SSN
有时最多有七八个孩子,他们都必须进入一个单独的专栏。那么有没有办法让所有这些SSN列彼此独特?如果没有在Access中,是否有一个程序可以做到这一点?我们目前正在使用MyDatabase,但我还没有找到在那里制作任何独特内容的方法。
答案 0 :(得分:2)
你这是错误的方式。如果你有一个有19个孩子的家庭怎么办?您将需要21个SSN列。当您的设计大于您的设计允许出现时,您真的想要修改所有表单和报告吗?
唯一性问题:
1.0 * 10^21
行比较。索引所有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)
优点: