Por que as colunas da tabela sqlite do Core Data começam com 'Z'?


10

Eu estava olhando para a tabela sqlite que o Core Data gera e percebi que todas as colunas da tabela começam com 'Z'. Sei que esse é um detalhe de implementação, mas fiquei curioso para saber por que esse é o caso e se havia uma decisão de design envolvida nisso. Alguém sabe ou adivinha por que?

Aqui está um exemplo de saída de esquema do banco de dados sqlite do Core Data:

sqlite> .schema
CRIAR TABELA ZPOST (Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZPOSTID INTEGER, ZUSER INTEGER, ZCREATEDAT TIMESTAMP, ZTEXT VARCHAR);
CRIAR ZUSER DE TABELA (Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZUSERID INTEGER, ZAVATARIMAGEURLSTRING VARCHAR, ZUSERNAME VARCHAR);
CRIAR TABELA Z_METADATA (Z_VERSION INTEGER PRIMARY KEY, Z_UUID VARCHAR (255), Z_PLIST BLOB);
CRIAR TABELA Z_PRIMARYKEY (CHAVE PRIMÁRIA Z_ENT INTEGER, Z_NAME VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER);

Eu realmente não tenho idéia do motivo nesse caso específico, mas não é incomum que tabelas de banco de dados que tenham um objetivo comum sejam prefixadas com um prefixo especial para facilitar a referência e evitar colisão de outras tabelas (por exemplo, usuário e zUser).
NoChance

Possivelmente para que sejam fáceis de identificar. A Apple está muito clara de que você nunca deve editar tabelas do Core Data com nada além de Core Data. Faz sentido, então, escolher um prefixo incomum para todas as tabelas do Core Data, para que seja fácil saber quando você estiver visualizando uma tabela do Core Data.
Caleb

11
Talvez tenha sido projetado por um ex-consultor da SAP?
Philipp

@ Philipp pode ter razão, embora eu tenha rido da sugestão inicial. No SAP, você adiciona Z a uma tabela personalizada para garantir nenhuma colisão com as tabelas internas do SAP. O mesmo pode estar acontecendo aqui: o CoreData adiciona um Z à frente das tabelas criadas para suas entidades para garantir que não haja colisões de tabela com nenhum de seus itens internos.
jmstone

11
No meu banco de dados de desenvolvimento local, prefixo as tabelas de teste com um Z para que elas sejam classificadas em ordem alfabética na parte inferior da lista. Torna mais fácil vê-los juntos e excluí-los quando terminar.
mike30

Respostas:


9

É a convenção de nomenclatura escolhida para ser usada no Core Data SQLite.

Existem várias razões pelas quais foi escolhido. Uma das principais razões é que Z é uma das letras menos usadas do alfabeto, então elas certamente sentiram ao pré-fixar nomes de tabelas e nomes de entidades com Z. Eles abrem mais opções para os desenvolvedores nomearem suas próprias tabelas com menos chances de pisar em alguém convenções de nomenclatura já.

Finalmente, usando Z e todas as maiúsculas, as tabelas dos Dados Principais são mais fáceis de localizar e chama os objetos da entidade. Em um comentário na pergunta, Mike mencionou que ele também nomeia suas tabelas com az, para que elas classifiquem o fundo. Isso também pode ter sido uma consideração.


11
Você está apenas especulando com base nas sugestões de outras pessoas ou tem uma fonte real do motivo pelo qual a Apple escolheu essa convenção? É um argumento bastante frágil, pois poderia ter sido prefixado com, por exemplo, "ENTITY_". Ou, se a Apple precisar de tabelas secretas internas, elas podem ser prefixadas com Z e as tabelas de usuários podem ter nomes normalmente. O OP perguntou por que e eu ainda não vejo uma razão real.
19415 Matt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.