我是MySQL的新手,并且正在迈出第一步。我现在有2个表格如下:
事件:
+-------+-------------+
| Field | Type |
+-------+-------------+
| id | int(11) |
| name | varchar(30) |
| date | datetime |
+-------+-------------+
用户:
+----------+-------------+
| Field | Type |
+----------+-------------+
| name | varchar(30) |
| amount | int |
+----------+-------------+
现在我希望能够为一个事件添加动态数量的用户,但我不知道我应该如何创建一个动态表,否则我应该如何实现这样的行为。什么是最佳做法?
帮助将不胜感激。
答案 0 :(得分:3)
这是一种经典的多对多关系。您可以通过添加新表来处理它
event_users table
-----------------
event_id
user_id
对于有两个用户(id = 3,4)的事件(id = 1),它看起来像这样
event_id | user_id
1 | 3
1 | 4
要获取活动的所有用户,您可以执行此操作
select u.name
from users u
join event_users eu on eu.user_id = u.id
join events e on eu.event_id = e.id
where e.name = 'my event'
答案 1 :(得分:2)
您需要第三个表,一个联结表:
create table UserEvents (
UserEventId int auto_increment primary key,
UserId int,
EventId int,
constraint fk_userevents_userid foreign key (UserId) references Users(id),
constraint fk_userevents_eventid foreign key (EventId) references Events(id)
);
注意:
Users(UserId)
和Events(EventId)
。(UserId, EventId)
上的唯一约束。答案 2 :(得分:1)
为此,您应该使用第三个表来维护事件和相关的用户ID。
user_event
id user_id event_id created_date
user_id和event_id是此表的外键,将分别指向用户和事件表的主键