当前位置:  开发笔记 > 后端 > 正文

与大量不同表格的多对多关系

如何解决《与大量不同表格的多对多关系》经验,为你挑选了1个好方法。

我在开发一个数据库模式时遇到问题.目前,我的应用程序有一个用户表和另一个事件表.我可以轻松地设置多对多关系(使用第三个表)来保存有关哪些用户正在参加哪些事件的信息.

我的问题是,事件只是我的应用程序的一个功能.目标是让用户可以参与大量不同的程序,每个程序都需要自己的表.然而,我仍然需要能够调出用户注册的所有内容的列表.

现在,我正在考虑从每个事件表向用户提供单向关系.然后我需要创建一个自定义函数(在我的网站ORM中),它独立地查询每个表并组装一个完整的列表.我觉得这会很慢,所以我也很想创建一个单独的表,只列出用户注册的所有程序,并在那里存储我的应用程序运行所需的信息.这将在我的数据库中重复信息,并且通常听起来不是"干净",但可能会更快.

有关处理此类关系的最佳方式的任何建议吗?

PS如果重要,我正在使用Doctrine2和Symfony2为我的网站供电.



1> 小智..:

在我的一个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,
    User  NOT NULL,
    Signup TIMESTAMP NOT NULL,
    PRIMARY KEY (TABLE, RowID, User)
);

因此,"表"列标识包含程序的表(例如,"事件"表).'RowID'是该表中的主键(例如'Events'表中的条目的PK).为了表现良好,这要求所有目标表中的主键具有相同的数据类型.

NoSQL解决方案很酷,但上面的模式适用于普通的旧关系数据库.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有