2013-11-09 4 views
0

Я пытаюсь вставить расходы, которые относятся ко многим друзьям. Но используя внешний ключ, он может ссылаться только на friendId, но я хочу хранить 2 friendId вместо одного для costFriend в таблице расходов. Потому что у каждого друга может быть много расходов, а расходы могут разделяться многими друзьями. Как я могу реализовать эти отношения? Может быть, не используя внешний ключ? Может ли кто-нибудь дать мне представление об этом? Большое спасибо.Android - (SQLite) Внешний ключ относится к нескольким идентификаторам сразу

Это мой создать код базы данных:

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

Вы сказали:

друг друга может иметь много расходов, и расходы могут разделяемое многими друзьями

Это означает, что между друзьями и расходами существует много-много отношений. В правиле большого пальца указано, что все отношения «многие ко многим» генерируют новую таблицу. Сказав это, вы должны создать следующие таблицы (жирный шрифт, первичные ключи):

  • ДРУГ: friendId, friendName ...
  • РАСХОДОВ: ExpenseID, expenseName ...
  • FRIENDS_EXPENSES: friendId, ExpenseID

Обратите внимание, что в новой таблице есть 2 полужирных поля. Это не означает, что есть 2 первичных ключа, а скорее один составной первичный ключ. Другими словами, может быть повторено friendId, а также повторный расход, но пара (friendId, costId) будет уникальной.

Таким образом вы превратите отношения «многие ко многим» в 2 отношения «один ко многим», с которыми вы, похоже, знаете, как работать.

+0

Итак, когда я хочу получить доступ к данным, что мне делать? выберите friendId или costsId? – AndroidWorld12

+0

Это зависит от 'данных', которые вы хотите выбрать :) Я бы порекомендовал вам Google о заявлениях о соединении SQL –

Смежные вопросы