2013-11-09 18 views
0

我試圖插入引用許多朋友的費用。但是使用外鍵,它只能引用friendId,但是我想在費用表中存儲2個friendId而不是一個用於費用的朋友。因爲每個朋友都可以有很多開支,並且開支可以被很多朋友分享。我怎樣才能實現這種關係?也許不使用外鍵?任何人都可以給我這樣做的想法嗎?非常感謝。Android - (SQLite)外鍵一次引用多個ID

這是我創建的數據庫代碼:

public void onCreate(SQLiteDatabase database) { 
    String query, query1, query2, query3; 
    query = "CREATE TABLE events (eventId INTEGER PRIMARY KEY, eventName TEXT, eventDate TEXT, eventLocation TEXT, eventDescription TEXT);"; 
    query1 = "CREATE TABLE friends (friendId INTEGER PRIMARY KEY, friendName TEXT, friendNumber TEXT, friendEmail TEXT, friendSpending DOUBLE, friendEvent INTEGER, FOREIGN KEY(friendEvent) REFERENCES events(eventId) ON DELETE CASCADE);"; 
    query2 = "CREATE TABLE expenses (expenseId INTEGER PRIMARY KEY, expenseName TEXT, expenseType TEXT, expensePrice REAL, expenseQuantity INTEGER, expenseEvent INTEGER REFERENCES events(eventId) ON DELETE CASCADE, expenseFriend INTEGER REFERENCES friends(friendId) ON DELETE CASCADE);"; 
    query3 = "CREATE TABLE temporary (_id INTEGER PRIMARY KEY, spendingId INTEGER)"; 
    database.execSQL(query); 
    database.execSQL(query1); 
    database.execSQL(query2); 
    database.execSQL(query3); 
    Log.d(LOGCAT, "events Created"); 
    Log.d(LOGCAT, "friends Created"); 
    Log.d(LOGCAT, "expenses Created"); 

回答

1

你說:

每個朋友可以有很多的費用,並且費用可以由許多朋友

這意味着共享朋友和開支之間存在多對多的關係。經驗法則指出,所有多對多關係都會生成一個新表。說了這麼多,你應該創建以下表格(粗體的主鍵):

  • FRIENDS:friendId,FRIENDNAME ...
  • 開支:expenseId,expenseName ...
  • FRIENDS_EXPENSES:friendIdexpenseId

注意的是,在新表中有2個大膽的領域。這並不意味着有2個主鍵,而是有一個複合主鍵。也就是說,可以重複friendId以及重複費用標識,但是這兩個對(friendId,expenseId)將是唯一的。

通過這種方式,您可以將多對多關係轉換爲2個一對多關係,您似乎知道如何使用這些關係。

+0

所以,當我想訪問數據,我該怎麼辦?選擇friendId還是expenseId? – AndroidWorld12

+0

這取決於你想要選擇的數據:)我建議你去Google關於SQL連接語句 –