MySQL将动态金额添加到表

时间:2017-06-16 10:41:00

标签: mysql sql

我是MySQL的新手,并且正在迈出第一步。我现在有2个表格如下:

事件:

+-------+-------------+
| Field | Type        |
+-------+-------------+
| id    | int(11)     |
| name  | varchar(30) |
| date  | datetime    |
+-------+-------------+

用户:

+----------+-------------+
| Field    | Type        |
+----------+-------------+
| name     | varchar(30) |
| amount   | int         |
+----------+-------------+

现在我希望能够为一个事件添加动态数量的用户,但我不知道我应该如何创建一个动态表,否则我应该如何实现这样的行为。什么是最佳做法?

帮助将不胜感激。

3 个答案:

答案 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)
);

注意:

  • 我将复数表格命名。
  • 该表的ID是单数,后跟“id”(所以我更喜欢Users(UserId)Events(EventId)
  • 这已经宣布了外键关系。
  • 如果不允许重复,那么您还需要(UserId, EventId)上的唯一约束。

答案 2 :(得分:1)

为此,您应该使用第三个表来维护事件和相关的用户ID。

user_event

id    user_id   event_id    created_date

user_id和event_id是此表的外键,将分别指向用户和事件表的主键