0

我正在尝试插入一项涉及许多朋友的费用。但是使用外键只能引用一个friendId,但是每个朋友可以有很多费用,一个费用可以被很多朋友共享。我该如何实现这种关系?也许不使用外键?谁能给我这样做的想法?谢谢。

这是我的创建数据库代码:

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");
4

1 回答 1

0

多对多关系不能用任一表中的列来表示。您必须为每个朋友/费用组合创建一个单独的表,其中包含一条记录:

CREATE TABLE friends ( friendId ...);
CREATE TABLE expenses ( expenseId ...);
CREATE TABLE FriendsExpenses(
    friendId  INTEGER REFERENCES friends(firendId),
    expenseId INTEGER REFERENCES expenses(expenseId),
    PRIMARY KEY (friendId, expenseId)
);
于 2013-11-09T11:35:00.300 回答