¿Por qué las columnas de la tabla sqlite de Core Data comienzan con 'Z'?

10

Estaba mirando la tabla sqlite que genera Core Data y noté que todas las columnas de la tabla comienzan con 'Z'. Me doy cuenta de que este es un detalle de implementación, pero tenía curiosidad sobre por qué ese es el caso y si hubo una decisión de diseño involucrada en esto. ¿Alguien sabe o adivina por qué?

Aquí hay un ejemplo de salida de esquema de la base de datos sqlite de Core Data:

sqlite> .schema
CREATE TABLE ZPOST (Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZPOSTID INTEGER, ZUSER INTEGER, ZCREATEDAT TIMESTAMP, ZTEXT VARCHAR);
CREATE TABLE ZUSER (Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZUSERID INTEGER, ZAVATARIMAGEURLSTRING VARCHAR, ZUSERNAME VARCHAR);
CREATE TABLE Z_METADATA (Z_VERSION INTEGER PRIMARY KEY, Z_UUID VARCHAR (255), Z_PLIST BLOB);
CREATE TABLE Z_PRIMARYKEY (Z_ENT INTEGER PRIMARY KEY, Z_NAME VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER);
Dia
fuente
Realmente no tengo idea de la razón en este caso específico, pero no es raro que las tablas de bases de datos que tienen un propósito común tengan el prefijo especial para facilitar la referencia y evitar la colisión de otras tablas (por ejemplo, usuario y zUser).
NoChance
Posiblemente para que sean fáciles de detectar. Apple tiene muy claro que nunca debe editar tablas de Core Data con otra cosa que no sea Core Data. Entonces, tiene sentido elegir algún prefijo inusual para todas las tablas de Core Data para que sea fácil saber cuándo está mirando una tabla de Core Data.
Caleb
1
¿Quizás fue diseñado por un ex consultor de SAP?
Philipp
@Philipp puede tener un punto, aunque me reí de la sugerencia inicial. En SAP, agrega Z a una tabla personalizada para garantizar que no haya colisiones con las tablas internas de SAP. Lo mismo puede estar sucediendo aquí: CoreData agrega una Z al frente de las tablas creadas para sus entidades para garantizar que no haya colisiones de tablas con ninguno de sus elementos internos.
jmstone
1
En mi base de datos de desarrollo local, prefijo las tablas de prueba con una Z para que estén ordenadas alfabéticamente al final de la lista. Hace que sea más fácil verlos juntos y eliminarlos cuando haya terminado.
mike30

Respuestas:

9

Es la convención de nomenclatura elegida para usarse en Core Data SQLite.

Hay varias razones por las cuales fue elegido. Una de las razones principales es que Z es una de las letras menos utilizadas del alfabeto, por lo que seguramente sintieron que al preestablecer los nombres de las tablas y los nombres de las entidades con Z abren más opciones para que los desarrolladores nombren sus propias tablas con menos posibilidades de pisotear a alguien convenciones de nomenclatura ya.

Finalmente, al usar Z y todas las mayúsculas, las tablas de Core Data son más fáciles de detectar y llama a los objetos de la entidad. En un comentario en la pregunta, Mike mencionó que también nombra sus tablas con az para que clasifiquen el fondo. Esto también podría haber sido una consideración.

Akira71
fuente
1
¿Estás especulando basándose en la sugerencia de otros o tienes una fuente real de por qué Apple eligió esta convención? Es un argumento bastante endeble ya que podría haber sido prefijado con, por ejemplo, "ENTITY_". O bien, si Apple necesita tablas internas secretas, estas podrían tener el prefijo Z y las tablas de usuario se pueden nombrar normalmente. El OP ha preguntado por qué y todavía no veo una razón real.
Matt