Поле содержит внешние идентификаторы для разных таблиц - PullRequest
2 голосов
/ 22 февраля 2010

Я занимаюсь разработкой php / mysql-игры для Facebook. Я застрял на элементе дизайна стола. Когда пользователь завершает задачу, я хочу вызвать любое количество событий.

Я думал о чем-то так:

tbl_events
*event_id - serogate primary ID
*task_id - foreign ID of the task just completed
*event_type - what type of event e.g is it a facebook stream publish or a message to the user or does it unlock a new element of the game?
*event_param - this is where it gets tricky...

параметр события является проблемой по двум причинам,

1) он будет содержать разные внешние идентификаторы ... в зависимости от event_type и, следовательно, не будет возможности присоединиться к таблице x. Это значит, что мне нужно будет вызвать два запроса.

2) Для большинства событий требуется один идентификатор или текст, однако для некоторых событий требуется несколько параметров, например, публикация в Facebook.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2010

Вообще говоря, вы должны создать таблицу событий только с критериями, общими для ВСЕХ типов событий. Затем вы должны создать таблицы event_type с полями, относящимися к конкретному типу события.

Учитывая эту настройку, ваш PHP может иметь фабрику событий, которая может анализировать ваши входные строки и определять, какой тип события создавать. Все различные типы событий будут использовать один и тот же интерфейс, но будут делать то, что требуется для их конкретного типа.

0 голосов
/ 22 февраля 2010

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

tbl_events
*event_id 
*task_id 
*event_type 
*event_param_for_message_to_user
*event_param_for_unlocking_game_feature
*event_param_1_for_facebook
*event_param_2_for_facebook
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...