Relacionamento no Sqlite
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.
Frederico Brigatte***
Respostas
Frederico Brigatte***
21/06/2013
Marcelo Senaga
21/06/2013
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/
Frederico Brigatte***
21/06/2013
Marcelo Senaga
21/06/2013
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).
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
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.
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
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.
Joel Rodrigues
21/06/2013
Escreva o script completo, já com os nomes das colunas e verá que parecerá mais claro.
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Se você já sabe os nomes das colunas, eu não acho que precise usar constantes para isso.
Isso aí você deve ter pego isso em algum exemplo, certo? Mas não precisa seguir à risca.
Frederico Brigatte***
21/06/2013
Frederico Brigatte***
21/06/2013
// CAMPOS DA TABELA CLIENTES public static final String KEY_ID_CLI = "_id"; public static final String KEY_NOME = "nome"; public static final String KEY_ENDERECO = "endereco"; public static final String KEY_TELEFONE = "telefone"; public static final String KEY_CELULAR = "celular"; public static final String KEY_EMAIL = "email"; // CAMPOS DA TABELA CARROS public static final String KEY_ID_CARRO = "_id"; public static final String KEY_IDCLIENTE_CARRO = "id_cliente"; public static final String KEY_IDTIPO_CARRO = "id_tipo_carro"; public static final String KEY_MODELO = "car_modelo"; public static final String KEY_PLACA = "car_placa"; // CAMPOS DA TABELA TIPO_CARRO public static final String KEY_ID_TIP = "_id"; public static final String KEY_TIPDESC = "tip_descricao";
Como poderia fazer nos campos do tipo KEY_ID.....? Porque id vou ter em todas as tabelas.
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
KEY_ID_CLI = "_id";
KEY_IDCLIENTE_CARRO = "id_cliente";
// CAMPOS DA TABELA CLIENTES public static final String KEY_ID_CLI = "_id"; // CAMPOS DA TABELA CARROS public static final String KEY_ID_CARRO = "_id"; public static final String KEY_IDCLIENTE_CARRO = "id_cliente"; public static final String KEY_IDTIPO_CARRO = "id_tipo_carro"; // CAMPOS DA TABELA TIPO_CARRO public static final String KEY_ID_TIP = "_id";
Teria alguma forma de usar o mesmo quando for para outra tabela como no exemplo acima?
Joel Rodrigues
21/06/2013
Quando eu for referenciá-las em outras tabelas, é interessante e comum criar uma coluna com um nome significativo, como você está fazendo (id_cliente, id_tipo_carro).
Não vejo por que mudar alguma coisa aí.
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Os relacionamentos são feitos somente por script?
Exemplo:
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);";
Não teria alguma ferramenta visual para fazer? Iria facilitar muito.
Frederico Brigatte***
21/06/2013
Exemplo:
public static final String KEY_OS_ID-CLIENTE = "id_cliente";
Frederico Brigatte***
21/06/2013
Exemplo:
public static final String KEY_OS_ID-CLIENTE = "id_cliente";
Não dá, rs, acabei de testar. Não aceita "-"
Joel Rodrigues
21/06/2013
Exemplo:
public static final String KEY_OS_ID-CLIENTE = "id_cliente";
O nome da constante não importa, não influencia em NADA. O que você deve prestar atenção é no nome das colunas.
Frederico Brigatte***
21/06/2013
private static String sql = "CREATE TABLE [clientes] ( [id] INTEGER PRIMARY KEY AUTOINCREMENT, [nome] [VARCHAR(30)], [email] [VARCHAR(40)], [endereco] [VARCHAR(50)], [numero] [VARCHAR(10)]);";
No meu ta tudo numa linha só.
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
private static String sql = "CREATE TABLE [clientes] ( [id] INTEGER PRIMARY KEY AUTOINCREMENT, [nome] [VARCHAR(30)], [email] [VARCHAR(40)], [endereco] [VARCHAR(50)], [numero] [VARCHAR(10)]);";
No meu ta tudo numa linha só.
Joel Rodrigues
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
SQLite2009 Pro Enterprise Manager essa seria uma boa?
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
http://www.ubiratansoares.com.br/blog/2012/12/consideracoes-sobre-android-e-orm/
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Eu, pelo menos, não tive dificuldade quando comecei a estudar.
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Como eu disse, pesquise a respeito e leia a documentação, é fundamental.
Boa sorte.
Frederico Brigatte***
21/06/2013
Joel Rodrigues
21/06/2013
Frederico Brigatte***
21/06/2013