[android] 안드로이드 SQLite 데이터베이스와 데이터 릴레이션쉽 (관계)

안드로이드 앱을 개발할 때 종종 로컬 데이터베이스를 사용해야 합니다. 임베디드 SQL 데이터베이스인 SQLite는 안드로이드 앱에서 일반적으로 사용됩니다. SQLite를 사용하여 데이터를 저장, 검색 및 관리할 수 있으며 데이터 간의 관계를 설정할 수도 있습니다. 이번 포스트에서는 안드로이드 앱에서 SQLite 데이터베이스를 만들고 데이터 간의 관계를 정의하는 방법에 대해 알아보겠습니다.

SQLite 데이터베이스 생성

먼저, SQLite 데이터베이스를 생성하는 방법부터 알아보겠습니다. 안드로이드 앱에서 SQLite 데이터베이스를 사용하려면 SQLiteOpenHelper 클래스를 확장하여 사용자 정의 데이터베이스 도우미 클래스를 만들어야 합니다. 예를 들어, 다음과 같이 데이터베이스를 생성할 수 있습니다.

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "my_database";
    private static final int DATABASE_VERSION = 1;

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 테이블 생성 SQL 문 실행
        db.execSQL("CREATE TABLE contacts (id INTEGER PRIMARY KEY, name TEXT, phone TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 업그레이드 로직 구현
    }
}

위의 코드에서는 MyDatabaseHelper 클래스를 정의하여 데이터베이스를 생성하고, onCreate 메서드에서는 contacts 테이블을 생성하는 SQL 문을 실행합니다.

데이터 간의 관계 설정

이제 데이터베이스에 데이터 간의 관계를 설정해야 합니다. 예를 들어, 연락처(contact)와 연락처 그룹(contact group)의 관계를 정의할 수 있습니다. 하나의 연락처는 여러 그룹에 속할 수 있고, 하나의 그룹에도 여러 연락처가 속할 수 있습니다.

이러한 경우, 각 테이블에 외래 키를 추가하여 관계를 설정할 수 있습니다. 아래는 연락처와 연락처 그룹 데이터를 저장하는 테이블을 생성하는 SQL 문의 예시입니다.

db.execSQL("CREATE TABLE contacts (id INTEGER PRIMARY KEY, name TEXT, phone TEXT)");
db.execSQL("CREATE TABLE contact_groups (id INTEGER PRIMARY KEY, group_name TEXT)");
db.execSQL("CREATE TABLE contact_group_relations (contact_id INTEGER, group_id INTEGER, FOREIGN KEY(contact_id) REFERENCES contacts(id), FOREIGN KEY(group_id) REFERENCES contact_groups(id))");

위의 코드에서 contact_group_relations 테이블은 연락처와 연락처 그룹 사이의 관계를 정의합니다. 이를 통해 연락처와 연락처 그룹 간의 다대다(DTM) 관계를 표현할 수 있습니다.

안드로이드에서 SQLite 데이터베이스를 통해 데이터 간의 관계를 정의하고 활용하는 방법에 대해 간단히 알아보았습니다. 데이터베이스를 생성하고 테이블 간의 관계를 설정하여 복잡한 데이터 구조를 다룰 수 있습니다.

참고 자료