tutorial studio manager mac create mysql sqlite restrictions

studio - Cómo restringir un valor de columna en SQLite/MySQL



sqlite studio (5)

Me gustaría restringir un valor de columna en una tabla SQL. Por ejemplo, los valores de columna solo pueden ser "coche" o "bicicleta" o "furgoneta". Mi pregunta es cómo lograr esto en SQL, y ¿es una buena idea hacerlo en el lado de la base de datos o debo permitir que la aplicación restrinja la entrada?

También tengo la intención de agregar o eliminar más valores en el futuro, por ejemplo, "camión"

El tipo de bases de datos que estoy usando son SQLite y MySQl


Agregue una nueva tabla que contenga estos medios de transporte y convierta su columna en una clave externa para esa tabla. Se pueden agregar nuevos medios de transporte a la tabla en el futuro, y su definición de columna seguirá siendo la misma.

Con esta construcción, definitivamente elegiría regular esto a nivel de DB, en lugar de a la aplicación.


Para MySQL, puede utilizar el tipo de datos ENUM.

column_name ENUM (''small'', ''medium'', ''large'')

Ver referencia de MySQL: el tipo ENUM

Para agregar a esto, creo que siempre es mejor restringir en el lado DB Y en el lado de la aplicación. Un Enum más un cuadro de selección y estás cubierto.


Sí, se recomienda agregar restricciones de verificación. Las restricciones de verificación se utilizan para garantizar la validez de los datos en una base de datos y para proporcionar integridad de los datos. Si se usan en el nivel de la base de datos, las aplicaciones que usan la base de datos no podrán agregar datos no válidos ni modificar datos válidos, por lo que los datos se vuelven inválidos, incluso si la propia aplicación acepta datos no válidos.

En SQLite:

create table MyTable ( name string check(name = "car" or name = "bike" or name = "van") );

En MySQL:

create table MyTable ( name ENUM(''car'', ''bike'', ''van'') );


Si desea utilizar la validación del lado de la base de datos, puede usar los desencadenantes. Vea this para SQLite y este instructivo detallado para MySQL.

Entonces la pregunta es si deberías usar la validación de la base de datos o no. Si tiene varios clientes, ya sean programas diferentes o usuarios múltiples (con versiones posiblemente diferentes del programa), definitivamente lo mejor es seguir la ruta de la base de datos. La base de datos está (con suerte) centralizada, por lo que puede desacoplar algunos de los detalles de la validación. En su caso particular, puede verificar que el valor que se inserta en la columna está contenido en una tabla separada que simplemente lista los valores válidos.

Por otro lado, si tiene poca experiencia con las bases de datos, planee dirigirse a varias bases de datos diferentes y no tiene tiempo para desarrollar experiencia, tal vez la validación de nivel de aplicación simple sea la opción más conveniente.


Usted usaría una restricción de verificación. En SQL Server funciona así.

ALTER TABLE Vehicles ADD CONSTRAINT chkVehicleType CHECK (VehicleType in (''car'',''bike'',''van''));

No estoy seguro de si este es el estándar ANSI pero estoy seguro de que MySQL tiene una construcción similar.