¿Cuáles son las reglas de asignación de PersistEntity/PersistField a nombres de columnas y tablas en la base de datos?

Necesito trabajar con una base de datos (MySql) existente, donde los nombres de tablas y columnas ya están definidos.

Si entiendo la documentación correctamente (y no encontré buena documentación sobre este tema, por lo que los enlaces serán muy apreciados), los nombres de las tablas están relacionados con PersistIdentity y, por lo tanto, deben comenzar con una letra mayúscula (que no es el caso I' m frente).

Sin embargo, los nombres de las columnas no se capitalizan automáticamente (al menos eso es lo que está implícito en el capítulo Persistente del libro de Yesod, en el fragmento de código que describe el código generado automáticamente a partir de las declaraciones), por lo que las columnas en la base de datos deben comenzar con una letra minúscula.

¿Es realmente cierta la descripción anterior?

¿Puedo controlar específicamente la asignación de tablas a identidades y columnas a campos? Si no, ¿cuáles son las reglas que se aplican automáticamente para el nombramiento? ¿Qué nombres están por lo tanto prohibidos?

Además, uno de los campos es VARCHAR(30). ¿Cómo puedo comunicar eso a Persistente? Actualmente se queja (a través de yesod devel) de que:

errMessage = "Columna BLOB/TEXT 'mi_campo' utilizada en la especificación de clave sin una longitud de clave"}

Que es el resultado de la migración automática (que probablemente debería deshabilitar de todos modos). Sin embargo, si quiero declarar un campo VARCHAR limitado, ¿puedo hacerlo a través de Persistent y su herramienta de migración automática?

Gracias,

preguntado el 03 de mayo de 12 a las 10:05

1 Respuestas

No soy una autoridad en el backend de MySQL, pero IIRC (y según el código), puede controlar la longitud máxima usando el maxlen=... atributo. Del mismo modo, puede tener un control directo del nombre que tendrá el campo en la base de datos utilizando el sql=... atributo. Entonces, por ejemplo, lo siguiente podría funcionar:

Person sql=people
    name Text sql=full_name maxlen=40
    age Int

También acepto que debe deshabilitar el código de migración automática si se trata de un esquema preexistente.

contestado el 03 de mayo de 12 a las 14:05

Gracias, también vi que la documentación de Persistent (en el libro de Yesod) respondió parte de mi pregunta (sobre la especificación de nombres de campo usando sql), lo siento por la redundancia de esa parte. - Uri Barenholz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.