2012-06-01 1 views
8

sqliteの2つのテーブルの関係について教えてください。androidのsqliteのリレーションシップテーブル

私はステップを挿入、削除、更新しますが、今は2つのテーブル間の関係をサポートする必要があります。私は推測する
前に行われたすべてのコードステップが変更されるでしょうか? テーブル関係と関係後の活動を説明するリンクや例がありますか?

答えて

-1

基本的なSQLデータベースプログラミングの本またはWebサイトをお読みください。 あるテーブルのキー(またはフィールド)を別のテーブルに追加することによって、2つのテーブル間のリレーションシップを作成します。しかし、実際には、まずSQLに精通する必要があります。あなたがそれをした後、あなたは関係を作成することができます、またはOrmliteを使用することが便利であることがわかります。

15

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

たとえば、2つの表、すべての顧客データを含むCUSTOMER表、およびすべての顧客注文を含むORDER表があるとします。ここでの意図は、すべてのオーダーが、すでにCUSTOMER表に入っている顧客と関連していなければならないということです。これを行うために、ORDERテーブルに外部キーを配置し、それをCUSTOMERテーブルの主キーに関連付けます。 SQLite Foreign Key Constraints

方法を以下に追加することができます::

編集:: あなたのよう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) 
); 
+0

この手順の後、どのようにアイテム注文表を挿入できますか?多くの顧客は多くの注文をしているからです。注文を挿入する方法ıが注文テーブルに到達する方法。 – user1417278

+0

は通常以下のコードを使用しています。プライベートボイドinsertkisi(文字列名、文字列の電子メール、文字列のpword){ \t \t \t \t \t SQLiteDatabaseデシベル= vnesne.getWritableDatabase(); \t ContentValues cv = new ContentValues(); \t \t \t \t cv.put(Veritabani.colName、name); \t \t \t \t cv.put(Veritabani.colAge、email); \t \t \t \t cv.put(Veritabani.colDept、pword); \t \t \t \tdb.insert( "kisi"、null、cv); \t \t \t \tdb。閉じる(); \t \t \t – user1417278

+0

@ user1417278編集を参照してください。外部キー制約に違反しない限り、関係なく値を挿入するために使用したコードを使用することもできます。 – Eight

1

良いサンプル 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、tgタグ、todo_tags tt WHERE tg.tag_name = 'ウォッチリスト' AND tg.id = tt.tag_id AND td.id = tt.todo_i d;

/* 
* 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; 
}