"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo manejar las relaciones de clave externa con varias tablas en bases de datos SQL?

¿Cómo manejar las relaciones de clave externa con varias tablas en bases de datos SQL?

Publicado el 2024-12-21
Navegar:325

How to Handle Foreign Key Relationships to Multiple Tables in SQL Databases?

Tratamiento de claves externas para varias tablas

Tiene tres tablas: regiones, países y estados. Los países y estados pueden pertenecer a regiones, formando una estructura jerárquica. Ahora, desea crear una tabla "popular_areas" con las columnas "region_id" y "popular_place_id" y establecer una relación de clave externa entre "popular_place_id" y países o estados basándose en una columna "popular_place_type".

Esto Este escenario presenta un desafío porque las restricciones de clave externa de SQL generalmente hacen referencia a una única tabla de destino. Sin embargo, existe un concepto conocido como Asociaciones polimórficas en el diseño de bases de datos que intenta abordar este problema.

Asociaciones polimórficas: unir varias tablas con un supertipo común

Las asociaciones polimórficas permiten una clave externa para hacer referencia a una de varias tablas de destino posibles. Esto se logra utilizando una columna adicional para especificar la tabla de destino a la que se hace referencia. Por ejemplo, en su caso, necesitaría una columna "popular_place_type" para determinar si "popular_place_id" hace referencia a un país o a un estado.

Sin embargo, las asociaciones polimórficas tienen limitaciones en SQL debido a restricciones. SQL no puede imponer la coherencia de la base de datos con asociaciones polimórficas. En cambio, depende de la aplicación o marco que implementa estas asociaciones para garantizar la integridad de los datos.

Soluciones alternativas para referencias de clave externa a múltiples tablas

Para mantener la integridad referencial sin polimórfico Asociaciones, consideren estas alternativas:

  • Creación de tablas separadas: Establezca tablas como "popular_states" y "países_populares", cada uno de los cuales hace referencia a estados y países, respectivamente. Esto proporciona integridad de datos a través de restricciones SQL, pero puede requerir múltiples consultas para recuperar todos los lugares populares asociados con un usuario.
  • Creación de una tabla principal: Cree una tabla de "lugares" que actúe como un supertipo para estados y países. Tanto los estados como los países tendrían claves externas que hagan referencia a "lugares", lo que garantiza la integridad referencial.
  • Uso de dos columnas: En lugar de una sola columna que haga referencia a estados o países, utilice dos columnas que acepten valores NULL: " state_id" y "country_id". Sin embargo, debe asegurarse de que solo una de estas columnas no sea NULL y aplicar esta restricción mediante la lógica de la aplicación o activadores de la base de datos.

Integridad relacional y violación de las formas normales

Es importante tener en cuenta que las asociaciones polimórficas violan los principios de normalización de la base de datos. La Primera Forma Normal (1NF) prohíbe mezclar diferentes significados en una sola columna, lo que ocurre cuando se almacenan ID de estado y país en una sola columna "popular_place_id". Las asociaciones polimórficas también violan la tercera forma normal (3NF) porque el significado de la columna "popular_place_id" depende de la columna adicional "popular_place_type".

En resumen, las asociaciones polimórficas ofrecen una solución potencial para las relaciones de clave externa en varias tablas en SQL. Sin embargo, introducen desafíos en la integridad de los datos y violan los principios de normalización de las bases de datos. Considere los enfoques alternativos mencionados anteriormente para una gestión sólida de los datos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3