字段包含不同表的外部ID

时间:2010-02-22 19:07:26

标签: mysql many-to-many

我正在开发一个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)它将包含不同的外来ID ...依赖于event_type,因此无法连接到x表。意思是我必须调用两个查询。

2)大多数事件需要单个id或文本,但有些事件需要多个参数 - 比如facebook stream publish。

2 个答案:

答案 0 :(得分:0)

您可以添加多个可以为空的列。然后,您仍然可以通过使用适用于不同事件类型的列来满足外键要求。

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

答案 1 :(得分:0)

一般来说,您可以使用所有事件类型共有的条件创建一个Events表。然后,您将使用特定事件类型的字段创建event_type表。

鉴于该设置,您的PHP可以有一个Event Factory,它可以解析您的输入字符串并确定要实例化的Event类型。所有各种事件类型都将使用相同的接口,但会执行特定类型所需的操作。