我在开发一个数据库模式时遇到问题.目前,我的应用程序有一个用户表和另一个事件表.我可以轻松地设置多对多关系(使用第三个表)来保存有关哪些用户正在参加哪些事件的信息.
我的问题是,事件只是我的应用程序的一个功能.目标是让用户可以参与大量不同的程序,每个程序都需要自己的表.然而,我仍然需要能够调出用户注册的所有内容的列表.
现在,我正在考虑从每个事件表向用户提供单向关系.然后我需要创建一个自定义函数(在我的网站ORM中),它独立地查询每个表并组装一个完整的列表.我觉得这会很慢,所以我也很想创建一个单独的表,只列出用户注册的所有程序,并在那里存储我的应用程序运行所需的信息.这将在我的数据库中重复信息,并且通常听起来不是"干净",但可能会更快.
有关处理此类关系的最佳方式的任何建议吗?
PS如果重要,我正在使用Doctrine2和Symfony2为我的网站供电.
在我的一个Web应用程序中,我使用了这种构造来存储任何以整数作为主键的表的注释:
CREATE TABLE Comments ( Table VARCHAR(24) NOT NULL, RowID BIGINT NOT NULL, Comments VARCHAR(2000) NOT NULL, PRIMARY KEY (TABLE, RowID, COMMENTS) );
就我而言(DB2,在Comments表中少于1000万行),它表现良好.所以,将它应用于您的案例:
CREATE TABLE Registration ( Table VARCHAR(24) NOT NULL, RowID BIGINT NOT NULL, UserNOT NULL, Signup TIMESTAMP NOT NULL, PRIMARY KEY (TABLE, RowID, User) );
因此,"表"列标识包含程序的表(例如,"事件"表).'RowID'是该表中的主键(例如'Events'表中的条目的PK).为了表现良好,这要求所有目标表中的主键具有相同的数据类型.
NoSQL解决方案很酷,但上面的模式适用于普通的旧关系数据库.