Boa noite.
Tenho um Banco de dados no SQLite que tem 11 tabelas, mas as principais são Professor, Aluno, ambos recebem a chave estrangeira de Endereco, Endereco, Turno, Turma, Disciplina, Matricula e Ano Letivo. A cardinalidade delas é N:N em todas, daí já viu neh… Fiz um diagrama, mas gostaria de opiniões se ele está certo ou não. Segue abaixo:
Quero saber como preenche as COLULAS das FKs.
Por favor, não fala em INSERT INTO… que não é o que procuro. Eu quero saber como preencho os inserts, por exemplo:
no onCreate:
banco.execSQL("CREATE TABLE " + TABELA_ENDERECO +
"(" + ID_ENDERECO + " INTEGER PRIMARY KEY AUTOINCREMENT," +
PAIS_ENDERECO + " TEXT," +
ESTADO_ENDERECO + " TEXT," +
CIDADE_ENDERECO + " TEXT," +
BAIRRO_ENDERECO + " TEXT," +
RUA_ENDERECO + " TEXT," +
NUMERO_ENDERECO + " TEXT," +
COMPLEMENTO_ENDERECO + " TEXT," +
CEP_ENDERECO + " TEXT)");
// TABELA_PROFESSOR
banco.execSQL("CREATE TABLE " + TABELA_PROFESSOR +
"(" + ID_PROF + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOME_PROFESSOR + " TEXT," +
CPF_PROFESSOR + " TEXT," +
FOTO_PROFESSOR + " BLOB," +
HORARIO_CADASTRO_PROFESSOR + " TEXT," +
FK_ID_PROF_ENDERECO + " INTEGER," +
"FOREIGN KEY (" + FK_ID_PROF_ENDERECO + ") REFERENCES " + TABELA_ENDERECO + (ID_ENDERECO) +")");
// TABELA_ALUNO
banco.execSQL("CREATE TABLE " + TABELA_ALUNO +
"(" + ID_ALUNO + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOME_ALUNO + " TEXT," +
CPF_ALUNO + " TEXT," +
FOTO_ALUNO + " BLOB," +
HORARIO_CADASTRO_ALUNO + " TEXT," +
FK_ID_ALUNO_ENDERECO + " INTEGER," +
"FOREIGN KEY (" + FK_ID_ALUNO_ENDERECO + ") REFERENCES " + TABELA_ENDERECO + (ID_ENDERECO) + ")");
Nos métodos de inserção:
public boolean inserirEnderecoBanco(String estado, String cidade, String bairro, String rua, String num, String compl, String pais, String cep){
SQLiteDatabase banco = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(PAIS_ENDERECO, pais);
contentValues.put(ESTADO_ENDERECO, estado);
contentValues.put(CIDADE_ENDERECO, cidade);
contentValues.put(BAIRRO_ENDERECO, bairro);
contentValues.put(RUA_ENDERECO, rua);
contentValues.put(NUMERO_ENDERECO, num);
contentValues.put(COMPLEMENTO_ENDERECO, compl);
contentValues.put(CEP_ENDERECO, cep);
long resultado = banco.insert(TABELA_ENDERECO, null, contentValues);
if(resultado == -1){
return false;
}
else{
return true;
}
}
public boolean inserirProfessorBanco(String nome, String cpf, byte[] foto, String horarioCadastro){
SQLiteDatabase banco = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NOME_PROFESSOR, nome);
contentValues.put(CPF_PROFESSOR, cpf);
contentValues.put(FOTO_PROFESSOR, foto);
contentValues.put(HORARIO_CADASTRO_PROFESSOR, horarioCadastro);
long resultado = banco.insert(TABELA_PROFESSOR, null, contentValues);
if(resultado != - 1){
return false;
}
else{
return true;
}
}
public boolean inserirAlunoBanco(String nome, String cpf, byte[] foto, String horarioCadastro){
SQLiteDatabase banco = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NOME_ALUNO, nome);
contentValues.put(CPF_ALUNO, cpf);
contentValues.put(FOTO_ALUNO, foto);
contentValues.put(HORARIO_CADASTRO_ALUNO, horarioCadastro);
contentValues.put(FK_ID_ALUNO_ENDERECO, ID_ENDERECO);
long resultado = banco.insert(TABELA_ALUNO, null, contentValues);
if(resultado == - 1){
return false;
}
else{
return true;
}
}
Como preencho o campo FK_ID_PROF_ENDERECO da tabela Professor e FK_ID_ALUNO_ENDERECO da tabela aluno sem erros e garantido que o Endereço cadastrado seja do Aluno/Professor?
Não está assim nos códigos, mas já testei fazendo o seguinte:
- No método de inserção do Endereco, retornei o ID dele;
- No ato de inserir um professor, insiro o ID do Endereço no campo da chave estrangeira do professor no (banco.insert(TABELA, null, contentValues); )
Pra mim isso é uma gambiarra kk… por isso que preciso saber como faz essa IMPLEMENTAÇÃO no banco de dados do SQLite
Desde já agradeço pela ajuda!