与较大表的外键关系是否会对性能产生影响?
CREATE TABLE CHARTOFACCOUNT --Contains all accounts
(
AccountNo VARCHAR(23) PRIMARY KEY,
--,
)
CREATE TABLE DEPOSITACCOUNT --Contains all deposit accounts(row less than CHARTOFACCOUNT)
(
AccountNo VARCHAR(23) PRIMARY KEY,
--,
)
CREATE TABLE DEPOSITACCOUNTSTATUS --Contains all Deposit account status 1 to 1 relation
(
AccountNo VARCHAR(23) PRIMARY KEY,
--,
)
DEPOSITACCOUNT
与CHARTOFACCOUNT
具有外键关系。现在来DEPOSITACCOUNTSTATUS
时,我可以与DEPOSITACCOUNT
或CHARTOFACCOUNT
建立外键关系,两者都有效。但由于CHARTOFACCOUNT
包含的行数多于DEPOSITACCOUNT
,因此存在任何性能问题?
答案 0 :(得分:1)
这听起来像是过早优化的情况。
根据您尝试建模的系统选择外键,而不仅仅是因为您认为可能存在性能问题。
你说:
我可以与DEPOSITACCOUNT建立外键关系 CHARTOFACCOUNT和两者都有效
这让我觉得你的设计可能有问题。 CHARTOFACCOUNT
表存储与DEPOSITACCOUNT
表不同的是什么?
为什么存款帐户与其他帐户类型的处理方式不同?为什么不将它们存储在类型为属性的Account
表中?
为什么存款帐户状态与帐户本身分开存储?如果表之间存在一对一的关系,您可以将该信息移到Account
表中。
答案 1 :(得分:1)
基本上,您有三个具有相同主键的表。假设您在表上创建了这些聚簇索引,那么表之间的访问将非常快。
你应该建立你的关系,这样他们才有意义。从命名方案来看,我猜测DepositAccountStatus
与DepositAccount
有关。因此,我会将外键关系放在该表中。
这不是性能问题。这只是简单地对数据建模。
另一个问题是为什么状态表与DepositAccount
具有相同的主键。为什么不直接将状态放在该表中?