2013-11-12 5 views
1

Я новичок в веб-разработке и занимаюсь классом, в котором мы работаем на сайтах с использованием PHP и MySQL.Таблицы таблиц в базе данных

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

Логически это имеет смысл для события быть строка в таблице расписания с даты и времени, название, местоположение и т.д.

Мой вопрос:

Как по существу хранить " указатель "к таблице в строке другой таблицы?

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

Пользователь будет иметь столбцы для

  • идентификатора пользователя (автоинкрементной)
  • электронной почты,
  • имени пользователя,
  • пароля (хеш),
  • соль,
  • и календари.)
+0

Вы говорите о 1/взятии класса и дизайна 2/базы данных. ** где ваше определение модели? ** (merise, uml ...) – Sebas

+0

Если вы создаете отдельные таблицы каждый раз, когда добавляется «календарь», у вас есть недостаток в вашем дизайне. У вас должна быть одна большая таблица СОБЫТИЙ, с столбцами, которые позволят вам нарезать таблицу на отдельные тематические календари по мере необходимости. –

ответ

1

Вы просто положили стол таблицы userId в таблицы календаря. И всякий раз, когда вы в них нуждаетесь, вы запрашиваете его в этих таблицах. Это единственная ссылка, в которой вы нуждаетесь.

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

+0

Ах. Хорошо, я понял. Благодарю. Теперь я разрабатываю свою структуру таблицы. –

0

Вам понадобятся в основном три стола здесь один для Users другой для Calendar и другой для Event.

И отношения были бы User могли иметь много календарей и Calendar могли иметь много Events.

Это, вероятно, выглядеть следующим образом:

TABLE Name : Users 
Fields  : userid(auto-incremented), email, username, password(hash), salt 

TABLE Name : Calendars 
Fields  : CalendarID, userid, dateFrom, dateTo, Category 

TABLE Name : Events 
Fields  : EventID, CalendarID, Description 

И ваш SQL, вероятно, выглядеть следующим образом:

Чтобы получить расписание данного пользователя будет:

SELECT CalendarID, dateFrom, dateTo, Category 
FROM Calendars 
WHERE userid = <user id here> 

И чтобы получить события этого календаря данного пользователя, вероятно, будет выглядеть так:

SELECT Calendars.CalendarID, dateFrom, dateTo, Category, Description 
FROM Calendars 
INNER JOIN Events 
ON Calendars.CalendarID = Events.CalendarID 
WHERE userid = <user id here> 
0

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

Для пользовательских встреч, в зависимости от требуемого уровня детализации, я бы просто сохранил идентификатор пользователя и идентификатор события. Событие будет иметь начало и конец datetime и идентификатор категории.

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

Смежные вопросы