Требуется хранить вложения для разных типов объектов.
Скажем, у нас есть 3 типа организаций: компания, отдел и сотрудник. Каждый может иметь несколько вложений (документов).
Какой лучший способ справиться с этим?
Решение 1:
Фирменный стол
Таблица отделов
Таблица сотрудников
Таблица атрибутов типа
- TypeId
- Типы (компания, отдел, сотрудник)
Таблица вложений
- * 1040 вложения *
- TypeId (соответствует типу вложения)
- entityId (отображается на CompanyId / DeptId / EmployeeId)
Плюсы: я могу легко добавлять новые типы объектов в будущем
Минусы: в этом случае я не могу поддерживать отношения внешнего ключа между сущностями и вложениями.
Решение 2:
Фирменный стол
Таблица отделов
Таблица сотрудников
CompanyAttachments table
- 1076 * вложения *
- CompanyId (FK)
таблица DeptAttachments
- 1084 * вложения *
- DeptId (FK)
Таблица EmployeeAttachments
- * 1092 вложения *
- EmployeeId (FK)
Плюсы: целостность внешнего ключа
Минусы: чтобы добавить новую сущность, мне нужна отдельная таблица вложений.
Итак, каков наилучший способ предположить, что в будущем мне может понадобиться добавить новые объекты?
Редактировать 1:
Спасибо за ваш ответ, ребята.
Если я захочу перейти к решению 2, я увижу, что проще создавать новые столбцы в таблице вложений, а не создавать новые таблицы вложений для каждого объекта, просто чтобы отобразить их?
что-то вроде
Фирменный стол
Таблица отделов
Таблица сотрудников
Вложения
- 1133 * вложения *
- CompanyId (FK)
- EmployeeId (FK)
- DepartmentId (FK)
я что-то здесь упускаю?