Чтобы расширить мой несколько краткий комментарий:
Я хотел бы объединить эти две таблицы
Я считаю, что это будет плохой идеей. На данный момент у вас есть две таблицы с хорошими понятными предикатами отношения (вкратце, что это означает для того, чтобы существовала запись в таблице) - и, самое главное, эти предикаты отношения разные для двух таблиц:
В PatientInsuranceCarriers
<=> существует запись, которая Patient
связана с этим Insurance Carrier
В ReferralInsuranceCarriers
<=> существует запись, которая Referral
связана с этим Insurance Carrier
Конечно, они похожи, но они не одинаковы. Теперь рассмотрим, каков будет предикат отношения объединенной таблицы:
- Запись существует в
ReferralAndPatientInsuranceCarriers
<=> {(IsPatient
- это true
и Patient
с идентификатором ID_PatientOrReferral
) или альтернативно (IsPatient
- это false
и Referral
с идентификатором ID_PatientOrReferral
)} связан с этим Insurance Carrier
или если вы сделаете это с NULL
s
- Запись существует в
ReferralAndPatientInsuranceCarriers
<=> {(ID_Patient
не NULL
и Patient
с идентификатором ID_Patient
) или, альтернативно (ID_Referral
не NULL
и Referral
с идентификатором ID_Referral
)} связан с этим Insurance Carrier
Теперь я не из тех, кто автоматически предполагает, что более сложные отношения с педикатами обязательно хуже; но я вполне уверен, что любой из двух вышеперечисленных хуже, чем те, которые они заменят.
Для решения ваших проблем:
теперь у нас есть две сущности LINQ to SQL, отдельные контроллеры и представления для каждого
В целом я бы согласился с уменьшением дублирования; однако только дублирование одних и тех же вещей! Здесь, разве это не тот случай, когда все вышеперечисленное по сути является «образцом», а их конструкцию и обслуживание можно делегировать подходящим инструментам разработки?
и должны объединять их при подготовке данных для отчетов
Если бы вы создали VIEW
, содержащий UNION
, для целей отчетности, вы сохранили бы простоту фактических данных и все еще имели бы возможность составлять отчеты в комбинированном списке; Например (предположения об именах столбцов и т. д.):
CREATE VIEW InterestingInsuranceCarriers
AS
SELECT
IC.Name InsuranceCarrierName
, P.Name CounterpartyName
, 'Patient' CounterpartyType
FROM InsuranceCarriers IC
INNER JOIN PatientInsuranceCarriers PIC ON IC.ID = PIC.InsuranceCarrierID
INNER JOIN Patient P ON PIC.PatientId = P.ID
UNION
SELECT
IC.Name InsuranceCarrierName
, R.Name CounterpartyName
, 'Referral' CounterpartyType
FROM InsuranceCarriers IC
INNER JOIN ReferralInsuranceCarriers RIC ON IC.ID = RIC.InsuranceCarrierID
INNER JOIN Referral R ON PIC.ReferralId = R.ID