.net 如何在数据库中存储阵列?

.net 如何在数据库中存储阵列?,.net,sql,database-design,.net,Sql,Database Design,我有一个简单的消息传递系统,到目前为止使用基于文件的存储。由于系统的用户数量正在逐渐增加,我希望切换到基于数据库的存储。 在代码中,消息服务器维护一个用户列表及其凭据和一个消息列表。消息对象的主字段有User类型的发件人、User[]类型的收件人和string类型的contents。 通常,用户将从服务器请求发送给他的邮件,并接收收件人字段包含其自己用户名的所有邮件。 因此,对于数据库,我设想如下表: -用户表 -消息表 -每个用户的一个表,用于指定通过MessageID发送给他的消息 我遇到的

我有一个简单的消息传递系统,到目前为止使用基于文件的存储。由于系统的用户数量正在逐渐增加,我希望切换到基于数据库的存储。

在代码中,消息服务器维护一个用户列表及其凭据和一个消息列表。消息对象的主字段有User类型的发件人、User[]类型的收件人和string类型的contents。 通常,用户将从服务器请求发送给他的邮件,并接收收件人字段包含其自己用户名的所有邮件。 因此,对于数据库,我设想如下表: -用户表 -消息表 -每个用户的一个表,用于指定通过MessageID发送给他的消息


我遇到的问题是如何存储包含数组的Recipients字段,以便数据库查询可以在其中搜索请求接收发送给他的消息的用户。我认为最好的解决方案莫过于为每个在系统上注册的新用户动态创建一个表,该系统保存对他作为收件人列出的消息的引用。还有其他方法吗?
非常感谢

用户表、消息表、消息发送方表如何-包含发送方用户id和消息id的映射。具有receipent用户id和消息id的接收方消息表。因此,多个receipent将映射到同一消息id,但表中将有多行。有道理吗


我看不出比这更好的解决办法了 动态地为每个对象创建一个表 新用户

您永远不应该从一个角度来看动态创建的表

一般来说,您的问题可按以下方式解决:

具有用户id、名称、姓氏的用户表。。。 包含消息id、时间戳、主题、正文、发送人的消息表。。。 A messages\u recipients表message\u id,recipient\u id
messages表中的sent_by字段和messages_recipients表中的recipient_id字段都应位于users表中的user_id字段中。

每个用户的表格都是无效的


Prashant在设计上是正确的,尽管我想添加一点改进:因为一个msg只有一个发送者,所以不需要单独的表来跟踪发送者,但是您可以在messages表中有一个field sender。加上用于映射msgs+收件人的收件人表。

您描述的是一种多对多关系,因此您需要的是位于[Users]收件人和[Messages]表之间的连接表

例如,一个表[UserMessages],它保存自己的主键id,以及另外两列,表示用户PK和消息PK


查询、实体等可以通过跨这些表连接,将多条消息与多个用户关联起来。

我认为没有比为每个新用户动态创建一个表更好的解决方案了。不要这样做。了解如何规范化数据库。此问题的答案可能对其他人有用。有没有关于如何重新表述其标题以使其更容易找到的建议?啊,是的,messages_recipients表是缺少的链接。大约5年后,我将尝试在数据库编程中实现它。谢谢我发现这个答案对db新手非常有用。你知道如何重新表述它的标题以使它更容易找到吗?@Dabblernl:也许是类似于“在数据库中存储数组”之类的东西吧+1.为帮助新手所做的努力:谢谢,提出这个问题的原因正是因为在运行中创建表格感觉不太对。