【问题标题】:Complexity of INSERT,DELETE,UPDATE operations in SQLSQL 中 INSERT、DELETE、UPDATE 操作的复杂性
【发布时间】:2018-07-21 09:32:56
【问题描述】:
我正在尝试在我的 android 应用程序中实现一个like 函数。我将存储每个项目的likes 显示在一个名为“likes”的表中。我想知道在 SQL 表中实现like 和like 的最佳方法是什么。我可以在like 上插入行,在like 上删除行,或者我可以使用额外的列'liked',其值为1,值为0不一样并首先运行 SELECT 查询以检查是否存在具有相同数据的行并将“喜欢”值更新为 1。如果用户从未喜欢过该项目,则运行 INSERT 查询以添加数据并将“喜欢”值设置为 1 . 在不同的情况下,我可以使用 UPDATE 查询将 'liked' 值设置为 0。
谁能建议我完成任务的最佳方式?
【问题讨论】:
标签:
sql
sql-update
time-complexity
sql-insert
sql-delete
【解决方案1】:
您的问题的答案取决于您要如何处理数据。如果您想要做的只是允许一个用户喜欢/不喜欢一个项目并记录喜欢和不喜欢的总数,那么您将使用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
);
喜欢/不喜欢会导致insert在表中添加一个新行。最初,您将聚合此表以计算项目的总点赞数。
当您的数据变得太大时,您会考虑如何更有效地存储汇总结果,可能使用触发器或存储过程。