Relacionamento no Sqlite

21/06/2013

15

Meus amigos, gostaria de saber como fazer os relacionamentos entre tabelas no SQLite. Eu tenho esse script:

private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("      
+ KEY_ID_CARRO + " integer primary key autoincrement, "      
+ KEY_IDCLIENTE_CARRO + " integer, "      
+ KEY_IDTIPO_CARRO + " integer, "      
+ KEY_MODELO + " text, "      
+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO      
+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI      
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE , FOREIGN KEY ( "       
+ KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " ("       
+ KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";   


O que poderia fazer para esse script ficasse mais claro e visível? Notem que tenho 2 relacionamentos.
Responder

Posts

Ninguém?
Responder

23/06/2013

Marcelo Senaga

Meus amigos, gostaria de saber como fazer os relacionamentos entre tabelas no SQLite. Eu tenho esse script:

private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("      
+ KEY_ID_CARRO + " integer primary key autoincrement, "      
+ KEY_IDCLIENTE_CARRO + " integer, "      
+ KEY_IDTIPO_CARRO + " integer, "      
+ KEY_MODELO + " text, "      
+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO      
+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI      
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE , FOREIGN KEY ( "       
+ KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " ("       
+ KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";   


O que poderia fazer para esse script ficasse mais claro e visível? Notem que tenho 2 relacionamentos.


Tem uns frameworks ORM para Android:

http://www.ubiratansoares.com.br/blog/2012/12/consideracoes-sobre-android-e-orm/

Responder
O que seria exatamente isso?
Responder

25/06/2013

Marcelo Senaga

É tipo o Hibernate, mas para Android.
Eu vi que você está criando as tabelas "na mão", via comando SQL. É como todo mundo faz. Mas existe esses ORM´s para Android, caso você queira algo mais sofisticado, no estilo do Hibernate. (claro, com certas limitações).
Responder

25/06/2013

Joel Rodrigues

Movendo o tópico para a nova sala de SQLite.
Responder
E como que funciona?
Responder
E ai, alguém pra ajudar?
Responder

25/06/2013

Joel Rodrigues

Qual é mesmo sua dúvida, Frederico? O que poderia fazer para o script ficar mais "claro e visível"?
Responder
Estou em dúvida qto aos relacionamentos. Por exemplo, no script postado acima, crio a tabela Carros? Tenho uma outra tabela chamada Clientes que também vai ter um campo id, como posso resolver esse problema? Em outra tabela chamada Tipo, também vou ter o campo id. E assim para as demais tabelas.
Responder
Isso mesmo. Gostaria de deixar mais vísível e claro o script e seus relacionamentos também.
Responder
Seria melhor usar o script com os próprios comandos sql ou utilizar constantes? Vou ter que utilizar 05 tabelas, por isso gostaria de um exemplo de código mais limpo e claro.
Responder

25/06/2013

Joel Rodrigues

Bom, aí você vai ter de estudar um pouco sobre relacionamentos (chaves estrangeiras ou foreign keys). O que você está fazendo é criar uma tabela de carros que está relacionada com o cliente e com o tipo. Ou seja, UM CARRO POSSUI UM CLIENTE E UM TIPO.
Com relação ao campo Id, todas as suas tabelas podem ter um campo Id ou com qualquer outro nome, o que não pode é ter dois campos iguais na mesma tabela.
Responder
Ja tenho as tabelas prontas com os scripts, queria deixar mais claro e limpo.
Responder
Tenho esse script criado:

Tabela Clientes:

private static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("
+ KEY_IDCLI + " integer primary key autoincrement, "
+ KEY_NOME + " text, "
+ KEY_ENDERECO + " text, "
+ KEY_TELEFONE + " text, "
+ KEY_CELULAR + " text, "
+ KEY_EMAIL + " text);";


Tabela Carros:

private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("     
+ KEY_ID_CARRO + " integer primary key autoincrement, "     
+ KEY_IDCLIENTE_CARRO + " integer, "     
+ KEY_IDTIPO_CARRO + " integer, "     
+ KEY_MODELO + " text, "     
+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO      
+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI      
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE , FOREIGN KEY ( "      
+ KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " ("      
+ KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";   


Tabela Tipo Carros:

   private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("    
    + KEY_ID_CARRO + " integer primary key autoincrement, "    
    + KEY_IDCLIENTE_CARRO + " integer, "    
    + KEY_IDTIPO_CARRO + " integer, "    
    + KEY_MODELO + " text, "    
    + KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO    
    + " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI    
    + " ) ON DELETE RESTRICT ON UPDATE CASCADE , FOREIGN KEY ( "     
    + KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " ("     
    + KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);"; 


Gostaria de deixar mais visível e limpo o código. Já tenho pronto.
Responder

25/06/2013

Joel Rodrigues

Amigo, para mim parece bastante claro. O fato de não parecer "limpo" é por que você está usando essas variáveis /constantes aí ao invés de botar logo os nomes das colunas.
Escreva o script completo, já com os nomes das colunas e verá que parecerá mais claro.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar