mysql - stackoverflow 如何找到用户并向他们发送通知?

标签 mysql data-structures

我正在创建一个类似 SO 的网站。现在我想知道,当我在 Jack 的回答/问题下写评论时,会发生什么? SO 向 Jack 发送通知,对吗?那么 SO 如何找到 Jack?

换句话说,我应该在投票/评论表中存储 author-user-id 吗?这是我当前的投票表结构:

// Votes
+----+---------+------------+---------+-------+------------+
| id | post_id | table_code | user_id | value | timestamp  |
+----+---------+------------+---------+-------+------------+
//                               ^ this column stores the user-id who has sent vote
//                   ^ because there is multiple Posts table (focus on the Edit)

现在我想为帖子所有者发送通知。但是我不知道怎么才能找到他?我是否应该在名为 owner 的 Votes 表中添加一个新列并存储 author-id ?


编辑:我不得不提到我有四个帖子(我知道这个结构很疯狂,但实际上那些的结构帖子 表真的很不一样,我不能只创建一个表)。像这样:

// Posts1 (table_code: 1)
+----+-------+-----------+
| id | title |  content  |
+----+-------+-----------+

// Posts2 (table_code: 2)
+----+-------+-----------+-----------+
| id | title |  content  | author_id |
+----+-------+-----------+-----------+

// Posts3 (table_code: 3)
+----+-------+-----------+-----------+
| id | title |  content  | author_id |
+----+-------+-----------+-----------+

// Posts4 (table_code: 4)
+----+-------+-----------+
| id | title |  content  |
+----+-------+-----------+

但是,只有一些 Post 表有 author_id 列(因为我有两个 Posts 表,它们不是由用户)。因此,如您所见,我无法在那些 Posts 表上创建外键。

我需要的:我想要一个 TRIGGER AFTER INSERTVotes 表,它会向 author 如果有 author_id 列。 (或者如果存在 author_id,则返回 author_id 的查询)。或者无论如何是解决我的问题的好方法......

最佳答案

Votes.post_id 应该是 Posts 表的外键。从那里您可以获得 Posts.author_id,并将通知发送给该用户。

对于多个 Posts# 表,您不能使用真正的外键。但是您可以编写一个 UNION 查询,根据 table_code 值连接适当的表。

SELECT p.author_id
FROM Votes AS v
JOIN Posts2 AS p ON p.id = v.post_id
WHERE v.table_code = 2
UNION
SELECT p.author_id
FROM Votes AS v
JOIN Posts3 AS p ON p.id = v.post_id
WHERE v.table_code = 3

尽量避免存储可以通过外键获取的数据,这样信息只存储在一个地方。如果您因为加入过多而遇到性能问题,您可能需要违反此规范化原则,但这只是作为最后的手段。

关于mysql - stackoverflow 如何找到用户并向他们发送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366267/

相关文章:

jquery - js 中的 ajax 调用未触发

java - 如何在mysql数据库中插入记录时调用java方法

mysql - 如何使用MySql从数据库中获取两个表的数据

mysql - PHP SQL 分页 LIMIT 子句

c++ - 如何使用 void `null` 或 `empty` 类元素扩展 C++ 结构/类

Java优先级队列

php - 如何获取组之间的第一条和最后一条记录?

sql - 使用 row_number() 通过分区生成计算列

algorithm - 在 O(nlogn) 时间内从一组 n 个点中获取前 k 个最接近的点对?

python - 时间序列数据预处理 - numpy strides trick to save memory