El requisito es almacenar archivos adjuntos para diferentes tipos de entidades.¿La mejor manera de diseñar este escenario de base de datos?
Digamos que tenemos 3 tipos de entidades Empresa, Departamento y Empleado. Cada uno puede tener múltiples archivos adjuntos (documentos).
¿Cuál es la mejor manera de manejar esto?
Solución 1:
mesa Compañía
- CompanyID
mesa Departamento
- DeptId
Empleado mesa
- EmployeeId
mesa AttchmentType
- TypeId
- Tipos (empresa, departamento, empleado)
tabla Adjuntos
- de archivo adjunto
- TypeId (mapas de tipo de archivo adjunto)
- entityId (mapas a CompanyID/DeptId/EmployeeId)
Pros: Puedo añadir nuevos tipos de entidades fácilmente en el futuro
Contras: En este caso, no puedo mantener la relación de clave externa mantenida entre las entidades y los archivos adjuntos.
Solución 2:
mesa Compañía
- CompanyID
mesa Departamento
- DeptId
Empleado tabla
- EmployeeId
tabla CompanyAttachments
- de archivo adjunto
- CompanyID (FK)
tabla DeptAttachments
- de archivo adjunto
- DeptId (FK) tabla
EmployeeAttachments
- de archivo adjunto
- EmployeeId (FK)
Pros: la integridad de clave externa
Contras: Para añadir nueva entidad Necesito tener nueva tabla de datos adjuntos por separado.
Entonces, ¿cuál es la mejor manera de ir con el supuesto de que puede ser necesario añadir nuevas entidades en el futuro?
Edición 1:
Gracias por su respuesta chicos.
Si yo quiero ir con la solución 2, veo que crea una nueva columna en la tabla de archivos adjuntos más fácil en lugar de crear nuevas tablas de fijación para cada entidad sólo para asignarlos? algo como,
mesa Compañía
- CompanyID
mesa Departamento
- DeptId
tabla de empleados
- EMPLOYEEID
Adjuntos
- de archivo adjunto
- CompanyID (FK)
- EmployeeId (FK)
- DepartmentID (FK)
¿Me falta algo aquí?
¿Has mirado en NoSQL basada en documentos (es decir, CouchDB) bases de datos? – JNK