Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Restringir tablas o comprobar desde servidor

Estas en el tema de Restringir tablas o comprobar desde servidor en el foro de Mysql en Foros del Web. Buenas! Tengo esta duda: ¿Qué es mejor, restringir las tablas (not null, check, etc), hacerlo desde la parte del servidor (PHP, ASP) o en ambos? ...
  #1 (permalink)  
Antiguo 21/08/2013, 08:17
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 11 años, 11 meses
Puntos: 33
Restringir tablas o comprobar desde servidor

Buenas!

Tengo esta duda: ¿Qué es mejor, restringir las tablas (not null, check, etc), hacerlo desde la parte del servidor (PHP, ASP) o en ambos?

Es decir, hay campos que siempre son obligatorios, y si bien lo compruebo desde el lado del servidor, no se si debería restringir también, con "Not Null" las tablas de la base de datos.

El tema está en que si va a ser contraproducente (menor rendimiento, por ejemplo) pues ya está bien así, pero supongo que tendrá su lógica (si no no estaría la opción, jejeje).

Así que, ¿Alguien me clarifica un poco?

Bueno, añadir que la base de datos no es "portable"; es decir, a esta base de datos solo se accede desde el portal web, sin posibilidad de acceder desde otro sitio.

Gracias.
  #2 (permalink)  
Antiguo 21/08/2013, 08:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Restringir tablas o comprobar desde servidor

Las restricciones NOT NUL en las tablas se deben poner siempre que haya datos obligatorios, para prevenir metidas de pata de los desarrolladores o de los que puedan operar directamente sobre la base.
No se crean por capricho, sino por requerimiento de integridad de datos. Es una forma desde la propia base para proteger estructuralmente la consistencia de la información.
Si esos datos son obligatorios, siempre debes declararlos NOT NULL en la tabla, aunque luego hagas lo mismo en la aplicación.
De ese modo, si hay un fallo de programación en algún momento, y un dato NULL se cuela, de todos modos la base se protegerá a si misma.
Lo que si debes tener en cuenta es que jamás se deben poner valores vacíos entre apostrofes (''), porque eso no es un NULL. es un espacio vacío, que a nivel de datos no es lo mismo.
Asimismo, es una pésima práctica insertar los valores numéricos encerrándolos como cadenas, porque eso esconde errores de parametrización, por ejemplo.
Código MySQL:
Ver original
  1. INSERT INTO tabla (a, b, c, d)
  2. VALUES(1, 2, 3, 4)
y no
Código MySQL:
Ver original
  1. INSERT INTO tabla (a, b, c, d)
  2. VALUES('1', '2', '3', '4')

porque esta segunda forma esconde el error si pasa esto:
Código MySQL:
Ver original
  1. INSERT INTO tabla (a, b, c, d)
  2. VALUES('1', '2', '', '')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/08/2013, 08:58
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 11 años, 11 meses
Puntos: 33
Respuesta: Restringir tablas o comprobar desde servidor

Cierto es que "acolchan" de errores de desarrolladores... pero en mi caso, tanto el diseño/implementación/mantenimiento de la base de datos como el diseño/implementación/mantenimiento de la aplicación web recae únicamente sobre mí, por lo que se lo que se puede y no se puede hacer.

Por otra parte, nunca está de mas ese "escudo" de la base de datos, sobretodo de cara a una conexión externa...

En cuanto a rendimiento, ¿afecta mucho? Es decir, yo imagino que para cada insert o update, el SQL tendrá que comprobar los check y los not null (amén de Auto-Increment y demás cosas), y no se si se llega a notar el cambio cuando haya múltiples accesos simultáneos (ya que obviamente un acceso aislado no se notará ningún cambio, jejeje).

Gracias por contestar.
  #4 (permalink)  
Antiguo 21/08/2013, 09:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Restringir tablas o comprobar desde servidor

Cita:
En cuanto a rendimiento, ¿afecta mucho?
Como bien mencionas, depende del impacto de los INSERT y UPDATE, que es donde realmente se produce el efecto.
Si la base tiene muchas altas/actualizaciones, y por muchas estamos hablando de miles diarios, entonces conviene un analisis de performance, y verificar si se puede mejorar de algún modo.
Cita:
el SQL tendrá que comprobar los check
Los CHECK no cuentan en MySQL, porque no existen.
Cita:
y no se si se llega a notar el cambio cuando haya múltiples accesos simultáneos (ya que obviamente un acceso aislado no se notará ningún cambio, jejeje).
No, no afectan los accesos concurrentes, porque el impacto es el mismo entre 100.000 registros ingresados por un mismo usuario, que 10.000 registros ingresados por 10 usuarios simultáneos. A ese nivel los bloqueos transaccionales producen más impacto que las restricciones de NOT NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, php, restringir, servidor, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:38.