Duda a la hora de hacer una restricción

Iniciado por Magnumrace, 11 Junio 2021, 20:16 PM

0 Miembros y 2 Visitantes están viendo este tema.

Magnumrace

Estoy creando una tabla y me he quedado en uno de los requisitos que me piden que es el siguiente:

El atributo carrera almacenará la inicial de la misma en mayuscula: (I)nformatica, (F)armacia, (D)erecho, etc.

Estoy creando la tabla alumno con sus atributos, tipo de datos etc. pero a la hora de crear el atributo carrera con esas restricciones me quedo en blanco, sé que puedo sacar la primera letra en mayuscula con substring pero no sé como aplicarlo para cada carrera.

Yo lo tengo pensado así:
(SQL Server)

Código (sql) [Seleccionar]
Carrera varchar(10) not null constraint ck_carrera (check in (substring ([nombre], 1, 1))

Serapis

#1
declaralo de tipo byte... obtienes la letra adecuada, la conviertes a mayúsculas y luego tomas el valor ASCII de la misma. Cuando insertes una asignatura, comprueba que no exista ya, si existe elige otra letra... un ejemplo:
(D)erecho, (M)atemáticas, Medici(N)a

Aunque si las asignaturas fueran constantes (introducidas todas inicialmente cuando creas la tabla), quedaría más sencillo pues puedes elegir antes que letras.

Técnicamente una tabla 'tblAsignaturas' debiera tener 2 campos, Id (primary key) y Asiganutura (varchar(40)), y opcionalmente otro campo Descripción...
Esto te permitiría tener por ejemplo tener Medicina I, Medicina II,  Medicina III, o Medicina nuclear... ahora si te han pedido expresamente una inicial, puedes hacerlo como te acabo de describir y crear un campo Abreviatura... aunque lo correcto es tener una tabla Asginaturas y tirar de Id para su identificación... pero si no te dejan crear una tabla asignaturas, técnicamente es... una chapuza.

p.d.: donde he puesto Asignatura, da igual que sea Carrera... no cambia más que el ejemplo.

Magnumrace

Cita de: Serapis en 11 Junio 2021, 22:39 PM
declaralo de tipo byte... obtienes la letra adecuada, la conviertes a mayúsculas y luego tomas el valor ASCII de la misma. Cuando insertes una asignatura, comprueba que no exista ya, si existe elige otra letra... un ejemplo:
(D)erecho, (M)atemáticas, Medici(N)a

Aunque si las asignaturas fueran constantes (introducidas todas inicialmente cuando creas la tabla), quedaría más sencillo pues puedes elegir antes que letras.

Técnicamente una tabla 'tblAsignaturas' debiera tener 2 campos, Id (primary key) y Asiganutura (varchar(40)), y opcionalmente otro campo Descripción...
Esto te permitiría tener por ejemplo tener Medicina I, Medicina II,  Medicina III, o Medicina nuclear... ahora si te han pedido expresamente una inicial, puedes hacerlo como te acabo de describir y crear un campo Abreviatura... aunque lo correcto es tener una tabla Asginaturas y tirar de Id para su identificación... pero si no te dejan crear una tabla asignaturas, técnicamente es... una chapuza.

p.d.: donde he puesto Asignatura, da igual que sea Carrera... no cambia más que el ejemplo.

Pero puedo hacerlo de la manera como lo hago? O algo parecido? Que cuando la ponga carrera Informática solo tome la primera letra que en este caso es la letra I.

Sin irnos a tal extremo que podría repetirse la misma letra

Serapis

Sí, si el dato es solo de consulta (y se asigna cuando se crea el usuario)...
Ahora, por qué usar un varchar(10) si sabes a propósito que su tamaño será fijo a 1 carácter?.

Magnumrace

Cita de: Serapis en 11 Junio 2021, 23:36 PM
Sí, si el dato es solo de consulta (y se asigna cuando se crea el usuario)...
Ahora, por qué usar un varchar(10) si sabes a propósito que su tamaño será fijo a 1 carácter?.


Tienes razón en lo que me dices. Había pensado en varchar (10) porque iba a tomar la palabra completa y de ahí mismo una letra. O sea que tengo que poner como tipo de dato Char no?