Requirement is to store attachments for different entity types.
Say we have 3 entity types Company , Department and Employee. Each can have multiple attachments (documents).
Which is the best way to handle this?
Solution 1:
Company table
Dept table
Employee table
AttchmentType table
Attachments table
Pros: I can add new entity types easily in future
Cons: In this case I can't have foreign key relationship maintained between entities and attachments.
Solution 2:
Company table
Dept table
Employee table
CompanyAttachments table
DeptAttachments table
EmployeeAttachments table
Pros: Foreign key integrity
Cons: In order add new entity I need to have new attachment table separately.
So which is the best way to go with assuming I may need to add new entities in future?
Edit 1:
Thanks for your reply guys.
If I want to go with solution 2, I see that creating new columns in attachments table easier instead of creating new attachment tables for every entity just to map them? что-то вроде
Таблица компаний
Таблица Dept
Таблица сотрудников
Вложения
Я что-то здесь упускаю?
Я бы определенно выбрал решение №2. Ваш единственный профессионал в решении №1 на самом деле не профессионал. Если вы добавляете новую сущность, вам обязательно придется уже добавить новую таблицу для этой сущности, и вы уже будете добавлять или изменять существующий код для ее обработки. Вы должны уметь создавать общие объекты, которые обрабатывают шаблон, чтобы дублированный код не был проблемой.
Я голосую за решение 2, потому что таким образом можно надлежащим образом обеспечить ссылочную целостность. Кроме того, вы можете легко (при необходимости) добавлять поля для специальных вложений (например, в EmployeeAttachments может быть битовое поле «PersonalPicture» или подобное)
Другие моменты, которые следует рассмотреть:
Нужно ли вам сворачивать вложения? Например, вложения сотрудника связаны с его/ее отделом и компанией? Если это частый запрос, то единая таблица вложений и отдельная и сильно индексированная таблица поиска сущностей могут дать лучшую производительность запроса.
Кроме того, будет ли вложений много и/или они настолько велики, что вам нужно разместить эти таблицы на отдельном устройстве или в другой системе хранения (т.е. указатели файловой системы)? Управление является проблемой, также как и производительность.