我应该如何处理一对多关系数据库模式中的数据更新?

dav*_*ave 5 sql database one-to-many

假设我有一个类似于以下的数据库:

Table: People

id | name | age
---+------+-----
 1 | dave | 78

Table: Likes

id | userid | like
---+--------+-------
 1 |    1   | apples
---+--------+-------
 2 |    1   | oranges
---+--------+-------
 3 |    1   | women
Run Code Online (Sandbox Code Playgroud)

处理更新daves数据的最佳方法是什么?目前,我执行以下操作:

Update his age
UPDATE People SET age = 79 WHERE id = 1;

Update his likes
DELETE FROM Likes WHERE userid = 1;
INSERT INTO LIKES (userid, like) VALUES (1, 'new like');
INSERT INTO LIKES (userid, like) VALUES (1, 'another like');
Run Code Online (Sandbox Code Playgroud)

我从表中删除所有用户数据,然后读取他们的新内容。这似乎效率低下。有没有更好的办法?

Mar*_*lze 0

您可以向 Likes 添加一个新列来存储实际年龄。通过这样做,您可以获得历史记录功能,并且您可以通过请求年龄最高的人来确定他的喜好,例如:

SELECT * FROM Likes WHERE userid = 1 AND age = (SELECT MAX(age) FROM Likes WHERE userid = 79 GROUP BY userid);
Run Code Online (Sandbox Code Playgroud)

当您希望能够覆盖某些点赞时,您还可以添加另一列“overriden_by”,其中包含新点赞的 id。这将导致更简单的查询:

SELECT * FROM Likes WHERE userid = 1 and overriden_by is null;
Run Code Online (Sandbox Code Playgroud)