Campo llave de tablas con el mismo nombre
Publicado por Arnoldo Martinelli (2 intervenciones) el 10/10/2008 06:13:57
Saludos amigos!
Quisiera obtener ayuda sobre la siguiente situación: En una base de datos, de SQL Server 2005, existen alrededor de 6 tablas cuyo nombre de la llave primaria es el mismo en todas, esto se hizo con el fin de que a la hora de relacionar dichas tablas (en otra tabla) no se tuvieran que crear 5 campos nulos (uno por cada llave de estas) a la hora de crear una nueva tupla, ya que esta tabla, donde se relacionan, tiene un crecimiento exponencial. Otro dato, a la hora de crear la tabla de relación se crean 6 llaves foráneas (evidentemente). Ahora bien, resulta que en el momento de insertar datos en la tabla de relación se produce un error de verificación de existencia de una de las llaves foráneas, es decir, el sql verifica que el código introducido exista en la tabla cuya llave foránea es la primera que se insertó al crear la tabla de relación (en consecuencia lo hará con todas, en el orden de inserción de las llaves foráneas, hasta dar con la que si posea este código).
Una posible solución es eliminar las relaciones de estas tablas y dejar el campo que representa la llave primaria de las mismas, sin embargo, esto trae como consecuencia de que se puede perder la integridad de la BD, ya que a este nivel se podría insertar datos falsos o erróneos, no sucede así a nivel de aplicación.
La pregunta es, existe alguna forma en que se pueda verificar la existencia de ese valor en alguna de las tablas a la hora de insertar, esto a nivel de BD, sin que se usen Triggers (ya que su uso no es permitido)? Al tener este problema, implica necesariamente un mal diseño de la BD? Se inclumple la normalización (se requiere cumplir cona la 3ra. Forma Normal)?
Muchas gracias por la ayuda que puedan brindarme.
Quisiera obtener ayuda sobre la siguiente situación: En una base de datos, de SQL Server 2005, existen alrededor de 6 tablas cuyo nombre de la llave primaria es el mismo en todas, esto se hizo con el fin de que a la hora de relacionar dichas tablas (en otra tabla) no se tuvieran que crear 5 campos nulos (uno por cada llave de estas) a la hora de crear una nueva tupla, ya que esta tabla, donde se relacionan, tiene un crecimiento exponencial. Otro dato, a la hora de crear la tabla de relación se crean 6 llaves foráneas (evidentemente). Ahora bien, resulta que en el momento de insertar datos en la tabla de relación se produce un error de verificación de existencia de una de las llaves foráneas, es decir, el sql verifica que el código introducido exista en la tabla cuya llave foránea es la primera que se insertó al crear la tabla de relación (en consecuencia lo hará con todas, en el orden de inserción de las llaves foráneas, hasta dar con la que si posea este código).
Una posible solución es eliminar las relaciones de estas tablas y dejar el campo que representa la llave primaria de las mismas, sin embargo, esto trae como consecuencia de que se puede perder la integridad de la BD, ya que a este nivel se podría insertar datos falsos o erróneos, no sucede así a nivel de aplicación.
La pregunta es, existe alguna forma en que se pueda verificar la existencia de ese valor en alguna de las tablas a la hora de insertar, esto a nivel de BD, sin que se usen Triggers (ya que su uso no es permitido)? Al tener este problema, implica necesariamente un mal diseño de la BD? Se inclumple la normalización (se requiere cumplir cona la 3ra. Forma Normal)?
Muchas gracias por la ayuda que puedan brindarme.
Valora esta pregunta


0