지금 데이터 베이스 API는 다음과 같은 기능을 합니다:
1. 디비에 있는 모든 태그 리스트 받아오기
2. 디비에 있는 모든 URI리스트 받아오기
3. 디비에 태그 추가하기

자료는 SVN에 올렸습니다. 소스 파일은 크게 세 파일이 있으며
DbApiDemo.java // API를 어떻게 사용하는지 알 수 있는 예제 파일입니다.
DbApis.java // API가 있는 실제 파일입니다. 필요합니다.
DatabaseAdapter.java // API의 베이스가 되는 파일입니다. 필요합니다.

이번 수요일까지의 데이터 베이스 작업 목표는 위의 세지기가
제 안동팀, 파르마콘팀, 그리고 제 테스트 데이터에서 돌아가는 것이며,
가능하다면 태그 수정, URI에 태그 추가까지 완료 할 수 있습니다.

수요일까지 시간이 있으니 지금 만든 걸로 다 갖다 붙이지 말고, 금방 수정이 될 것이라는 걸 감안해 주세요.

정모때마도 팀의 열기를 느낄 수 있었고, 시간이 되면 더 좋은 프로그램을 위해서 아래 주제와 이슈도 참고해 주세요.
-데이터 베이스 구조: 두개의 테이블(TagTable, UriTable)
TabTable:
create table TagTable(Tag text primary key);

UriTable:
create table UriTable(_id integer primary key autoincrement, Uri text not null, Tag text not null,
foreign key(Tag) references TagTable(Tag));

SQLite가 foreign key를 지원하지만 제대로 작동하진 않고,실제로 작동하기 위해서는 trigger를 사용하는게 최선으로 보입니다.
create trigger TAG_INSERT_TRIGGER
before insert on UriTable
for each row begin
select rais(abort, 'Illegal insert') 
where (select Tag from TagTable where Tag = NEW.Tag) Is NULL; 
end;
이 구문이 SQLite 콘솔에서는 작동하는데, Java에서는 안됩니다. 즉, 없는 태그를 Uri에 추가해도 꼭 있는 태그가 추가된 것처럼
잘못 저장되죠. 조금 더 시간을 할애해 볼게요.

 데이터베이스에서 쿼리를 했을때는 커서를 받게 되는데, 이게 맘에 안드는 부분이 하나 있습니다. 커서로부터 스트링을 받아와야 하는데,
결과값에서 스트링이 여러개일 경우 잘못 사용할 수 있습니다.
데이터 커플링이 높아져서 API를 수정하기 쉽지도 않고, 또 사용자가 잘못 사용할 수 있습니다.
uriCur.getString(0) // 0번 인덱스는 Uri
uriCur.getString(1) // 1번 인덱스는 Tag
해결하는 첫번째 아디디어는 DbApis class에 상수들을 추가해서 인덱싱을 상수를 사용하게 하는 것이고, 예를 들면
uriCur.getString(db.uriFromGetAllTagList());
다른 방밥은 클래스를 추가하는 것입니다. 클래스 추가가 전체 퍼포먼스에 영향이 될거라고 생각하지는 않지만 
안드로이드에서는 영향이 있을지도 모르겠습니다.

그리고 현재 사용자(파르마콘, 안동팀)가 메소드를 사용하기 전에 db를 열고 그 후에 db를 닫아야하는데, 퍼포먼스에 문제가 없다면
매 DB를 사용할 때마다 제 API가 자동으로 db를 매번 열고 닫는 일을 할 수 있습니다. 

테이블이 두 개가 있는데, 지우고 쓰고 하는 과정에서 여러가지 가능성이 있는데 현재는 고려하지 않았고, 또 현재 태그는 실제 그림파일과는 상관없이 그냥 가상의 Uri를 추가하고 지우는 것이죠. 나중에  그림파일이 지워졌을 때 같은 경우를 고려하지 않았습니다.

피드백 기다릴게요.