2015-01-19 2 views
0

Я новичок в базах данных, и мне нужна была помощь. У меня есть одна таблица в моей базе данных, которая содержит информацию обо всех событиях. Так, например, есть строки, каждая из которых описывает другое событие.Имея SQL автоматически создавая таблицу

Теперь мне также нужно отслеживать пользователей, посещающих мероприятия. Итак, как бы я это сделал? Я думал, что если есть какой-то способ, чтобы иметь новую таблицу специально для этого одного события, созданного каждый раз, когда новая строка добавляется в таблицу событий. Можно ли это сделать? Или было бы хорошей идеей просто добавить столбец в таблицу основных событий, с именами людей, посещающих запятую или точку с запятой или что-то еще? Или лучше сделать таблицу для каждого пользователя, причем каждая строка является посещаемым событием?

Заранее спасибо.

ответ

2

Лучший способ сделать это будет иметь что-то вроде следующего:

Create table events( 
    id integer, 
    <OTHER EVENT DETAILS HERE (i.e. start time, location, duration etc> 
    primary key (event_id) 
); 

Create table users(
    id integer, 
    <OTHER USER DETAILS HERE (i.e. name, email, phone etc)> 
    primary key (user_id) 
); 

CREATE TABLE event_users(
    event_id integer, 
    user_id integer, 
    <OTHER USER/EVENT DETAILS HERE (i.e. ticket price paid etc)> 
    Primary Key (event_id,user_id), 
    Foreign Key (event_id) REFERENCES events(id), 
    Foreign Key (user_id) REFERENCES users(id) 
); 

Таким образом, события могут иметь 0 или многие пользователи посещают, и пользователи могут присутствовать 0 или много событий, и вам не нужно создавать больше таблиц.

, как вы бы тогда получить данные будут что-то вроде:

SELECT U.id 
FROM User U, UserEvent UE 
WHERE U.id = UE.user_id 
AND UE.event_id = <event id you want to search for>; 
+0

Прошу прощения за это так поздно, но как бы добавить строки в таблицу event_users? Могу ли я просто сделать «INSERT INTO event_users VALUES (123, 123)»? Или это что-то другое? –

+1

Правильно, это стандартная вставка. Единственное, о чем нужно помнить, это то, что «event_id» и «user_id» являются внешними ключами, что означает, что вы не можете вставлять значения для этих двух полей, которые не существуют в таблицах «события» и «пользователи» соответственно. –

+0

Ahhh очень приятно. Поэтому предположим, что я удаляю пользователя. Он также исчезнет из таблицы event_users? –

1

... было бы неплохо просто добавить столбец в таблицу основных событий с именами людей, занятых запятой или точкой с запятой или что-то в этом роде?

Хм, вы можете прочитать на joins, сначала это поможет с отношениями между таблицами. Вы должны создать таблицу событий и таблицу пользователей с relational table, чтобы отслеживать, какие пользователи на каком событии. Таким образом, вам не нужно иметь список пользователей с запятой (который вообще не работает).

Я бы предположил, что у вас есть одна таблица событий, которая имеет тип в другой таблице, я уверен, что каждое событие будет содержать одну и ту же информацию, поэтому это имеет смысл.

Создание таблиц «на лету» просто вызовет путаницу и сложность, которые я не думаю, что вы действительно можете оправдать здесь.

1

Это звучит, как вы отображения многие-ко-многим. Каждый пользователь может посещать один или несколько событий, и каждое событие может иметь 1 или более пользователей. Одним из вариантов было бы иметь три таблицы. Таблица 1: События, описывающие каждое событие. Таблица 2: Пользователи, которые описывают каждый пользователь Таблица 3: EventUsers, которая будет промежуточной таблицей. В этой таблице должно быть не менее двух столбцов: первичный ключ от событий и первичный ключ от пользователей.