sexta-feira, julho 10, 2009

SQLite e Relacionamentos

Para quem não conhece, o SQLite é um banco de dados leve open source, escrito em C, transacional que não precisa de servidor e sem necessidade de configuração. O banco destaca-se pela sua ótima performance e portabilidade. E como usamos esse banco então? Basta nós adicionarmos a lib (dll) do SQLite em nossos projetos. Para saber mais acesse a home page do projeto http://www.sqlite.org/.

Uma das suas grandes deficiências é a falta de relacionamentos. Porém como o banco suporta triggers, muita gente implementa esses relacionamentos através destas. Assim ao invés de você criar um relacionamento, você cria várias triggers. Para ilustrar o que estou falando vamos a um exemplo da criação de um relacionameto em um banco de dados relacional qualquer:

CREATE TABLE casa (
id INTEGER NOT NULL PRIMARY KEY
);

CREATE TABLE morador (
id INTEGER NOT NULL PRIMARY KEY,
casaId INTEGER
CONSTRAINT fk_casa_id REFERENCES casa(id)
);
No SQLite, este relacionamento é implementado da seguinte forma:

-- Foreign Key Preventing insert
CREATE TRIGGER fki_morador_casaId_casa_id
BEFORE INSERT ON [morador]
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'insert on table "morador" violates foreign key constraint "fki_morador_casaId_casa_id"')
WHERE NEW.casaId IS NOT NULL AND (SELECT id FROM casa WHERE id = NEW.casaId) IS NULL;
END;

-- Foreign key preventing update
CREATE TRIGGER fku_morador_casaId_casa_id
BEFORE UPDATE ON [morador]
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'update on table "morador" violates foreign key constraint "fku_morador_casaId_casa_id"')
WHERE NEW.casaId IS NOT NULL AND (SELECT id FROM casa WHERE id = NEW.casaId) IS NULL;
END;

-- Foreign key preventing delete
CREATE TRIGGER fkd_morador_casaId_casa_id
BEFORE DELETE ON casa
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'delete on table "casa" violates foreign key constraint "fkd_morador_casaId_casa_id"')
WHERE (SELECT casaId FROM morador WHERE casaId = OLD.id) IS NOT NULL;
END;
Como pode-se ver, não é nenhum pouco prático, no entanto seguindo essa onda de WEB 2.0 foi criado um serviço na internet que já cria esses códigos automaticamente para você, bastando que nós colemos o código de criação do relacionamento. Para usar esse serviço acesse http://rcs-comp.com/site/index.php/view/Utilities-SQLite_foreign_key_trigger_generator e aproveite para melhorar seu banco!.

0 comentários:

Related Posts Plugin for WordPress, Blogger...