8

sqlite の 2 つのテーブル間の関係について教えてください。

挿入、削除、更新の手順を実行しますが、2 つのテーブル間の関係をサポートする必要があります。以前に行われたすべてのコードステップが変更されると思い
ます。テーブルの関係と関係後のアクティビティを説明するリンクまたは例はありますか?

4

3 に答える 3

20

2つのテーブル間の関係を確立するには、外部キーを使用できます。外部キーは、別のテーブルの候補キーと一致するリレーショナルテーブルのフィールドです。

たとえば、すべての顧客データを含むCUSTOMERテーブルと、すべての顧客注文を含むORDERテーブルの2つのテーブルがあるとします。ここでの意図は、すべての注文がすでにCUSTOMERテーブルにある顧客に関連付けられている必要があるということです。これを行うには、外部キーをORDERテーブルに配置し、それをCUSTOMERテーブルの主キーに関連付けます。

SQLiteでは、外部キー制約は次の方法で追加できます::

編集::次のようにitem_orderテーブルを設計できます::

CREATE TABLE customer(
         id INTEGER,
         firstName TEXT,
         middleName TEXT,
         lastName   TEXT,
         address TEXT,
         contactNum TEXT
);

 CREATE TABLE item(
        id INTEGER,
        name TEXT,
        description TEXT
 );

 CREATE TABLE order(
        id INTEGER,
        customerID INTEGER,
        date TEXT,
        FOREIGN KEY(customerId) REFERENCES customer(id)
 );

 CREATE TABLE item_order(
        id INTEGER,
        orderID INTEGER,
        itemId  INTEGER,
        quantity INTEGER,
        FOREIGN KEY(orderId) REFERENCES order(Id),
        FOREIGN KEY(itemId) REFERENCES item(Id)
 );
于 2012-06-01T04:02:54.593 に答える
2

良いサンプル http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/

// Table Create Statements
// Todo table create statement
private static final String CREATE_TABLE_TODO = "CREATE TABLE "
        + TABLE_TODO + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TODO
        + " TEXT," + KEY_STATUS + " INTEGER," + KEY_CREATED_AT
        + " DATETIME" + ")";

// Tag table create statement
private static final String CREATE_TABLE_TAG = "CREATE TABLE " + TABLE_TAG
        + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TAG_NAME + " TEXT,"
        + KEY_CREATED_AT + " DATETIME" + ")";

// todo_tag table create statement
private static final String CREATE_TABLE_TODO_TAG = "CREATE TABLE "
        + TABLE_TODO_TAG + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
        + KEY_TODO_ID + " INTEGER," + KEY_TAG_ID + " INTEGER,"
        + KEY_CREATED_AT + " DATETIME" + ")";

SELECT * FROM todos td, tags tg, todo_tags tt WHERE tg.tag_name = 'ウォッチリスト' AND tg.id = tt.tag_id AND td.id = tt.todo_id;

/*
 * getting all todos under single tag
 * */
public List<Todo> getAllToDosByTag(String tag_name) {
    List<Todo> todos = new ArrayList<Todo>();

    String selectQuery = "SELECT  * FROM " + TABLE_TODO + " td, "
            + TABLE_TAG + " tg, " + TABLE_TODO_TAG + " tt WHERE tg."
            + KEY_TAG_NAME + " = '" + tag_name + "'" + " AND tg." + KEY_ID
            + " = " + "tt." + KEY_TAG_ID + " AND td." + KEY_ID + " = "
            + "tt." + KEY_TODO_ID;

    Log.e(LOG, selectQuery);

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            Todo td = new Todo();
            td.setId(c.getInt((c.getColumnIndex(KEY_ID))));
            td.setNote((c.getString(c.getColumnIndex(KEY_TODO))));
            td.setCreatedAt(c.getString(c.getColumnIndex(KEY_CREATED_AT)));

            // adding to todo list
            todos.add(td);
        } while (c.moveToNext());
    }

    return todos;
}
于 2015-01-07T23:00:26.943 に答える
-1

基本的なSQLデータベースプログラミングに関する本やWebサイトを読むべきだと思います。一方のテーブルのキー(またはフィールド)をもう一方のテーブルに追加することにより、2つのテーブル間の関係を作成します。しかし実際には、最初にSQLに精通している必要があります。それが終わったら、関係を作成するか、Ormliteを使用すると便利です。

于 2012-06-01T03:29:43.910 に答える