Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 可以将同一列用作不同表的主键吗?_Ms Access_Primary Key_Arcmap - Fatal编程技术网

Ms access 可以将同一列用作不同表的主键吗?

Ms access 可以将同一列用作不同表的主键吗?,ms-access,primary-key,arcmap,Ms Access,Primary Key,Arcmap,我对整个数据库世界都是新手,我有一个问题。我正在为硕士班的最后一个项目建立一个数据库。该数据库包括科罗拉多州的城市、县和人口数据。该数据库最终将用作空间数据库。此时,我已在Access中构建了所有表,并与PostgreSQL建立了ODBC连接,以便在创建表后导入这些表。Access不允许将shapefile添加到数据库中,PostgreSQL允许 我的问题是关于主键的,Access中的每个表都共享一个FIPS代码(该代码允许我将人口统计数据连接到一个shapefile,并使用适当的坐标在ArcM

我对整个数据库世界都是新手,我有一个问题。我正在为硕士班的最后一个项目建立一个数据库。该数据库包括科罗拉多州的城市、县和人口数据。该数据库最终将用作空间数据库。此时,我已在Access中构建了所有表,并与PostgreSQL建立了ODBC连接,以便在创建表后导入这些表。Access不允许将shapefile添加到数据库中,PostgreSQL允许

我的问题是关于主键的,Access中的每个表都共享一个FIPS代码(该代码允许我将人口统计数据连接到一个shapefile,并使用适当的坐标在ArcMap中显示数据)。我有很多人口统计数据表和这个FIPS代码。是否可以将FIP设置为每个表的主键?或者每个表都需要自己的主键,这与其他表不同吗


谢谢你的帮助

默认PK是“ID”,因此对所有表使用此默认值确实没有问题

事实上,这意味着对于您编写的任何表或代码,您现在都可以轻松确定主键是什么

如果您复制或重新命名一个表,那么您同样知道该ID

有些人确实喜欢将表名作为PK的一部分,但这确实违反了数据的规范化,因为现在您将外部属性附加到该PK列

但是,对于FK(外键),由于列的定义本身就是一个外部依赖项,因此我倾向于包含如下表名:

客户识别码

同样,由于这种命名约定,您可以始终“猜测”或“知道”FK列的名称(表名+ID)


归根结底,在这个问题上还没有真正的公约。不过,我建议您创建的所有表都允许access创建默认的“id”PK。当然,这是假设您的数据库设计没有使用自然键。自然键与代理键(自动编号pk“id”)之间的争论有许多优点和缺点。你可以在谷歌上搜索自然密钥和代理密钥,对这个问题进行无休止的讨论。

有可能吗?当然,但可能不是一个好的设计选择。我可以理解将FIPS用作键字段,但不是所有表的主字段。通常,您将表设计为包含相似的数据,但描述不同实体的属性。您的“城市”、“县”表不会是FIP;我相信他们应该是名字。可以使用自动编号字段作为主键。因为您的表可能与一对多关系相关,所以您的成员表不能使用FIPS,因为它不是唯一的。是的,某些事情是有例外的,但我的建议是否定的!太棒了,谢谢你,韦恩。正因为如此,我才正确地理解。。。。您的建议是使用自动生成的“ID”字段作为大多数人口统计数据的主键?“姓名”字段作为城市和县的主键?同样,在我的犯罪人口统计表中,FIPS代码作为主键,那么在所有其他包含FIPS编号的表中,它会是FK吗?啊,仅对一个信息片段进行评论的危险:)你可以使用自动编号字段作为主键,但我通常更喜欢在可能的情况下使用一个独特的字段。若您有四个表:工厂、产品、客户和订单,那个么工厂可以使用工厂名称或PK;产品也一样。但是,由于存在重复项,可能无法使用客户名称作为主键(可能有1000家“第一银行”分行),因此您需要一个复合键,或者一个--我只使用一个作为主键。是的,使用FIPS作为FK也是可以的。是的,我知道仅凭一点信息很难给出好的建议。如果你想帮我看一下数据库,我很乐意与你分享。谢谢你的帮助。为什么我很难理解PK和FK的关系?我整个学期都在为这门课做ERD的时候为它而挣扎。我似乎无法将键的意义联系起来??作为PK的“ID”应该存在于每个表中。FK只是一个“长”数字字段。然后,您的代码(或访问子表单)将放置要将此记录关联回的表的“PK”ID的值。因此,一个客户表,然后说一个客户拥有的家具表,然后对于家具中要“指向”或“关联”到单个客户记录的每个记录,只需将父记录“ID”中的PK值键入此FK列。当您将子记录直接添加到表中时,FK不会自动为您填写。这使您更容易理解。所以,基本上PK是“指针”,FK是指针指向的?当然。事实上,最好简单地说,PK是用于标识该行的“东西”——不做更多的事情,也不做更少的事情。PK并没有真正指向任何东西。FK只是一个列,其中包含希望子记录指向的表+行中的PK值。因此,PK实际上并不指向任何东西,而是标识该行的“一件事”。要与父表关联的任何子表都意味着您只需在该FK列中输入PK值。所以它实际上只指向记录的FK列,而PK列不指向任何东西。