Я настоятельно рекомендую вам НЕ использовать метод "2 дискриминатора". У вас фактически будет столбец внешнего ключа, который указывает на одну из трех таблиц, в зависимости от поля ComplaintType. Если вы сделаете это, вы будете обходить проверки ссылочной целостности, предоставляемые SQL Server, и все преимущества, которые предоставляются с внешними ключами. На моей предыдущей работе была таблица EntityTypeIndexLabel, которая представляла собой «таблицу мостов», которая связывала IndexLabels (в основном метаданные) с различными «сущностями», которые представляли собой множество различных потенциальных таблиц (Document, Binder, Workflow и т. Д.) Это было просто ужасно. ФК в этой таблице может указывать на множество разных таблиц. Осиротевшие записи могли появляться везде. Для определения таблицы, к которой нужно присоединиться, должна быть реализована дополнительная логика. В общем, объединение было трудной задачей. Это были все виды головной боли.
Я думаю, что у вас есть два варианта:
-3 столбца в жалобе: EmployeeComplaintID, CompanyComplaintID, SupplierComplaintID. Идентификаторы жалоб должны быть уникальными во всех таблицах (представьте здесь GUID, а не столбцы IDENTITY). В каждой строке в Жалобе будет заполнен только один из этих идентификаторов, остальные два будут пустыми. Затем вы можете просто НАСТРОИТЬ ВНУТРЕННЕЕ СОЕДИНЕНИЕ с этими таблицами в каждом запросе, чтобы получить необходимые данные.
- Одна гигантская таблица со всеми возможными полями, необходимыми для каждого типа жалобы, с установкой неиспользуемых полей других типов жалобы в NULL.