Esta pregunta no se trata de la diferencia entre SQL y NoSQL. Estoy buscando alguna razón para algo que realmente no tiene sentido para mí en este momento (tal vez debido a mi falta de comprensión o apreciación).
Hemos comenzado un nuevo proyecto desde cero utilizando MVC5, primero el código de Entity Framework 6 y SQL Server 2008. Cuando el arquitecto revisó el esquema de la base de datos, se afirmó que todas las claves externas y otras restricciones similares deberían eliminarse ya que esto es "lógica de negocios" y debe aplicarse dentro de la capa empresarial del código de la aplicación.
Mi opinión es que las claves externas forman parte de los datos / integridad referencial y realmente no imitan la lógica empresarial. Veo la lógica empresarial como más el proceso y la validación que controla qué / cuándo / cómo / por qué se aplican las referencias. Puedo entender que las restricciones únicas son posiblemente procesos de negocios, pero para mí esto solo complementa la lógica y forma parte de la integridad.
Un segundo argumento es que el objetivo es adoptar un enfoque NoSQL para los datos. Encontré esto realmente inusual y poco ortodoxo: teniendo en cuenta el uso de SQL-Server 2008, la necesidad de informar, los datos no escalan a terabytes y la falta de consideración hacia tecnologías como Mongo, Raven, etc.
¿Alguien se ha encontrado con tal escenario antes? ¿Por qué alguien adoptaría un enfoque NoSQL en un servidor SQL diseñado para datos referenciales y no querría claves externas?
fuente
Respuestas:
Entonces es un idiota, y es probable que algún extracto de su base de código termine algún día en The Daily WTF . Tienes toda la razón en que su enfoque no tiene sentido, y francamente tampoco su explicación.
Intente explicarle que las restricciones de integridad referencial no son "lógica de negocios"; son un estándar de corrección con su propia verificación incorporada. La lógica empresarial se trata de lo que haces con los datos; La integridad consiste en garantizar que los datos en sí no estén corruptos. Y si eso no funciona ... bueno, él está a cargo. Puedes seguir su plan e intentar mitigar un poco el daño, o comenzar a buscar un mejor lugar para trabajar. (O ambos.)
fuente
Dejando a un lado las declaraciones generales, vale la pena reconocer que existen razones legítimas y fuertes para elegir no usar restricciones de unicidad o claves externas. La mayoría dice algo como esto:
Consulte también ¿Qué hay de malo con las claves foráneas?
Pero esos no coinciden con los motivos en su pregunta.
Esta razón es un poco extraña. La singularidad y otras restricciones de integridad son en gran medida el dominio de una base de datos ACID. El código de su aplicación no puede acercarse a las garantías de atomicidad e integridad de SQLServer. Si necesita una integridad de datos sólida, sería una tontería ignorar la base de datos.
La segunda razón no es realmente una razón; Es una conclusión. Aunque es cierto que las restricciones son una compensación entre la corrección y el rendimiento, y el sesgo de las bases de datos NoSQL hacia este último.
Tal vez el arquitecto de su sistema tenga en cuenta estas razones legítimas y haya escuchado mal. O tal vez es un idiota chiflado.
En cualquier caso, existen razones válidas (aunque no universales) para abstenerse de usar restricciones de unicidad y clave externa.
PD: si concluye que no desea claves foráneas, todavía está bien usar una base de datos relacional. Como generalización, las bases de datos relacionales son más maduras que sus contrapartes NoSQL. Como un solo nodo, incluso pueden ser más rápidos , y se puede construir una abstracción NoSQL sobre ellos .
fuente