No me deja poner tinytext como Primarykey

Tengo una tabla (es una tabla relación) con dos columnas persona_cod (int) y persona_email (tinytext) y me deja marcar el primero como primary key pero necesito marcar los dos campos ya que los dos juntos son clave primaria...
Estoy trabajando con SQLYog.
Respuesta
1
Como puedes ver aquí: http://bugs.mysql.com/bug.php?id=8429
MySQL no permite que campos tipo Blob sean claves primarias. Lo cual tiene su lógica por su dificultad para indexar.
En tu caso, deberías poner el campo persona_email como varchar(320) (que es la longitud máxima de un email: 64 cars del nombre + 1 de la arroba + 255 cars del dominio, según la RFC2821: ftp://ftp.rfc-editor.org/in-notes/rfc2821.txt, en el punto 4.5.3).
Por último, desconozco el esquema de tu base de datos, pero poner como clave primaria la composición de ambas puede darte problemas en el futuro. Hay varias discusiones en Internet sobre las claves primarias, sobre todo en foros de frameworks MVC, donde recomiendan que la clave primaria sea un campo autoincremental sin relación con los datos. En tu caso te puedes crear el campo id de tipo entero autoincremental, y los campos persona_cod y persona_email hacerlos como índices únicos.
El tema es así, tengo una tabla con datos de "personas", id_persona, nombre, apellido, dirección, etc... Te comento que como el atributo "email" de la persona es multivaluado (una persona puede tener muchos emails) y como la relación entre persona - email es "uno a muchos" me he llevado el email a otra tabla y este "arrastró" la clave de persona. ¿Es decir la segunda tabla queda "id_persona" - "email" y las dos son claves (está bien así?), ya que puede haber varios registros (filas) con el mismo id_persona, pero ningún registro que conincidan ambas, es decir, el id_persona y el email a la vez.
¿He normalizado bien? ¿Es correcto suponer que los dos campos de la tabla email deben ser claves?
Muchas gracias
Está bien como lo planteas, pero en este caso puedes poner email como un varchar para poder crear la clave compuesta. Se quedaría persona_email como varchar(320)
Muchas gracias por tu ayuda, ha solucionado el problema. La única duda que me quedó es si es realmente necesario poner "320" en Varchar ya que son muchos caracteres para un email. Yo creo que con Varchar (30) o (40) estaría bien, pero bueno.
GRACIAS y ahí van mis 5 estrellitas!

1 respuesta más de otro experto

Respuesta
1
Pues si que recuerdo que en un índice se pueden unir dos campos y que hagan como un solo índice (pero no recuerdo como), lo que no recuerdo es si se puede hacer con la clave primaria. Siento no poder ayudar más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas