【发布时间】:2010-09-28 10:01:58
【问题描述】:
我有一个这样的数据库架构:
[Patients] [Referrals]
| |
[PatientInsuranceCarriers] [ReferralInsuranceCarriers]
\ /
[InsuranceCarriers]
PatientInsuranceCarriers 和 ReferralInsuranceCarriers 相同,只是它们引用的是患者或推荐人。我想合并这两个表,使其看起来像这样:
[Patients] [Referrals]
\ /
[PatientInsuranceCarriers]
|
[InsuranceCarriers]
这里有两个选择
- 要么创建两个新列 - ID_PatientOrReferral + IsPatient(将告诉我要引用哪个表)
- 或创建两个不同的列 - ID_Patient 和 ID_Referral,两者都可为空。
一般来说,我会尽量避免使用可为空的列,因为我认为它们是一种不好的做法(意思是,如果你可以不使用空值,那么你就不需要可以为空的列)而且它们更难使用在代码中(例如,LINQ to SQL)。
但是我不确定第一个选项是否是个好主意。我看到可以在 ID_PatientOrReferral 上创建两个 FK(一个用于患者,一个用于推荐人),尽管由于明显的原因我无法在那里设置任何更新/删除行为,但我不知道插入的约束检查是否有效方式,要么,所以看起来 FK 只是为了标记存在关系。或者,我可能不创建任何外键,而是手动在 DBML 中添加关系。
是否有更好的方法?为什么?
【问题讨论】:
-
为什么要合并它们?
-
查询、报告和维护。除了 FK 之外,这两个表具有完全相同的列,我们现在有两个 LINQ to SQL 实体、单独的控制器和视图,并且在为报告准备数据时必须合并它们,因此建议将这两个表合并。
标签: sql-server linq-to-sql foreign-keys