gpt4 book ai didi

sql - 处理多对多关系时如何创建条目?

转载 作者:搜寻专家 更新时间:2023-10-30 23:32:27 25 4
gpt4 key购买 nike

我很难理解我是否正确地处理了这种情况:

我有用户,我有事件。一个用户可以属于多个事件,一个事件可以有多个用户。如果我创建一个新事件(id、名称、描述、日期),我还想存储可能会参加此事件的所有用户(假设有 5 个用户)。

为此,我的交易是否必须包括以下两项:

  1. 将新事件(名称、描述、日期)插入事件

  2. 将 5 行 Event_User(event_id, user_id) 插入到 events_users

或者,还有其他方法吗?

就其值(value)而言,我使用的是 nodeJS + knex 查询生成器,我能够成功完成上面列出的事务。它添加了事件,并且还将可能要参加所述事件的 n 个用户添加到 events_users 表中。但是,我试图了解如何完成这样的事情(不使用 ORM),所以我想知道这种方法是否至少是正确的。

谢谢!

最佳答案

我建议使用第三个表——比如说,event_attendance——来跟踪哪些用户正在参加哪些事件。您可以通过joins查询考勤情况如所须。这是一种非常常见的做法,熟悉它会很好:

-- this query will tell you who is attending what
SELECT usr.username, evt.eventname, evt.eventdate
FROM event_attendance att
INNER JOIN events evt
ON att.eventid=evt.eventid
INNER JOIN users usr
ON att.userid=usr.userid
ORDER BY evt.eventdate ASC;

Here is a sql fiddle证明这一点。我创建了非常简单的表格:

CREATE TABLE users (userid int, username varchar);
CREATE TABLE events (eventid int, eventname varchar, eventdate date);
CREATE TABLE event_attendance (eventid int, userid int);

然后用数据填充它们:

-- create some users and events
INSERT INTO users VALUES (1, 'Jack');
INSERT INTO users VALUES (2, 'Jill');
INSERT INTO users VALUES (3, 'Anusha');
INSERT INTO users VALUES (4, 'Pierre');

INSERT INTO events VALUES (1, 'A Movie', '2017-11-30');
INSERT INTO events VALUES (2, 'Christmas Dinner', '2017-12-25');
INSERT INTO events VALUES (3, 'Skydiving trip', '2018-05-01');
INSERT INTO events VALUES (4, 'Big Reunion', '2018-06-01');

-- insert some attendance records
INSERT INTO event_attendance VALUES (1, 1);
INSERT INTO event_attendance VALUES (2, 1);
INSERT INTO event_attendance VALUES (2, 2);
INSERT INTO event_attendance VALUES (3, 2);
INSERT INTO event_attendance VALUES (3, 3);
INSERT INTO event_attendance VALUES (4, 1);
INSERT INTO event_attendance VALUES (4, 2);
INSERT INTO event_attendance VALUES (4, 3);
INSERT INTO event_attendance VALUES (4, 4);

鉴于此数据,以下是您将从上述查询中获得的出勤结果:

+----------+------------------+------------+
| username | eventname | eventdate |
+----------+------------------+------------+
| Jack | A Movie | 2017-11-30 |
| Jack | Christmas Dinner | 2017-12-25 |
| Jill | Christmas Dinner | 2017-12-25 |
| Jill | Skydiving trip | 2018-05-01 |
| Anusha | Skydiving trip | 2018-05-01 |
| Jill | Big Reunion | 2018-06-01 |
| Pierre | Big Reunion | 2018-06-01 |
| Anusha | Big Reunion | 2018-06-01 |
| Jack | Big Reunion | 2018-06-01 |
+----------+------------------+------------+

关于sql - 处理多对多关系时如何创建条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com