【发布时间】:2016-11-21 02:44:45
【问题描述】:
我正在制作一个新的实体框架模型,以便以更清洁、更准确的方式存储我们的数据。我们目前的数据库(在 Access 中)充满了重复和不可靠的数据,并且不是由数据库专家计划的,因此经常完全丢失主键。它也非常大,因此查询需要很长时间(即使有索引)。
在新的数据库模型中,我希望它能够为一个部门的员工提供快速输入,并为其他所有人提供快速选择。我们有超过一百万条记录的表,更不用说审计表了,当然这些表要大得多。
我的模型有一个以 companyID 作为主键的 company 表,一个以 contactID 作为主键的联系人表,然后是一个名为 CompanyContact 的关联表,其中 companyID 和 contactID 都设置为其主键。然后我需要将其他表关联到这个关联表。例如,如果我想存储员工和联系人(他们可能同时为超过 1 家公司工作)之间的交互,我可以为这个交互表设置主键为 companyID、contactID 和 EmployeeID,但我会有3个主键。 (我在数据库中还有很多关于这个问题的其他场景。)
我记得读过(某处...)向表提供超过 1 个主键会减慢查询速度。他们建议(根据上述示例)为 CompanyContact 表提供一个 id 字段作为主键,以及 2 个外键(CompanyID 和 ContactID),然后将交互表与该 id 字段相关联。我更习惯于按照他们推荐的方式进行操作,但我已经看到,从外键中创建多个主键可以在根目录停止重复,而无需在任何地方对其进行编码。
谁能告诉我拥有多个主字段会在多大程度上减慢查询速度以及最推荐的方法是什么?提前致谢!
【问题讨论】:
-
一张表最多只能有一个主键。您误解了您阅读的内容。
-
我认为你的意思是复合键而不是多个主键
标签: sql-server database entity-framework