SQL中插入、删除和更新操作的复杂性

SQL中插入、删除和更新操作的复杂性,sql,sql-update,time-complexity,sql-insert,sql-delete,Sql,Sql Update,Time Complexity,Sql Insert,Sql Delete,我正在尝试在我的android应用程序中实现一个like函数。我将在一个名为“likes”的表中存储每个项目的like。我想知道在SQL表中实现这样的相似和不相似的最佳方法是什么。我可以在相似上插入行,在不相似上删除行,或者我可以使用一个额外的列“like”,该列的like值为1,difference值为0,然后首先运行SELECT查询,检查是否存在具有相同数据的行,并将“like”值更新为1。如果用户从不喜欢该项,然后运行插入查询添加数据并将“喜欢”值设置为1。在上,我可以使用更新查询将“li

我正在尝试在我的android应用程序中实现一个like函数。我将在一个名为“likes”的表中存储每个项目的like。我想知道在SQL表中实现这样的相似和不相似的最佳方法是什么。我可以在相似上插入行,在不相似上删除行,或者我可以使用一个额外的列“like”,该列的like值为1,difference值为0,然后首先运行SELECT查询,检查是否存在具有相同数据的行,并将“like”值更新为1。如果用户从不喜欢该项,然后运行插入查询添加数据并将“喜欢”值设置为1。在上,我可以使用更新查询将“liked”值设置为0


有人能给我建议执行任务的最佳方法吗?

你的问题的答案取决于你想对数据做什么。如果您只想让一个用户喜欢/不喜欢某个项目,并记录喜欢和不喜欢的项目总数,那么您可以使用
update

items
表将有一列,称为
likes
。对于“相似”的情况,该值将递增,对于“不相似”的情况,该值将递减

我认为这种功能是不够的,你真的想维护一个记录,记录每一个“喜欢”和“不喜欢”。这意味着一个表格,比如:

create table userLikesItem (
    userLikesItemId int auto_increment primary key,  -- "auto_increment" depends on the database
    userId int references users(userId),
    itemId int references items(itemId),
    like int check (like in (1, -1)),
    createdAt datetime default current_timestamp
);
“相似/不相似”将导致在表中插入新行。最初,您将聚合此表以计算某个项目的喜欢总数


当数据太大时,您会考虑更有效地存储汇总结果的方法,可能使用触发器或存储过程。

您使用的是哪种DBMS?请把它贴上标签,这对你来说不是很简单吗?