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)
我从表中删除所有用户数据,然后读取他们的新内容。这似乎效率低下。有没有更好的办法?
您可以向 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)