PHP:是否有一种设计模式可以将对象保存在数据库中?

PHP:是否有一种设计模式可以将对象保存在数据库中?,php,database,design-patterns,Php,Database,Design Patterns,在数据库中保存大量对象集合是非常常见的。非常简单的例子是,在大型社交网络中,在用户之间或用户本身(具有多个属性)之间保留消息的问题。这样说来,例如,在应用程序中,需要保持具有多个属性的对象的大集合。有一些方法可以做到这一点: 要使用PHP保持对象的序列化版本,请执行以下操作:serialize 将对象的每个属性保留在表的不同列中 使用PHP:simplexmlement::asXML创建对象的XML版本并保留与其关联的字符串 这些程序在性能(内存/处理)方面是否存在显著差异(优势/优势) 欢迎任

在数据库中保存大量对象集合是非常常见的。非常简单的例子是,在大型社交网络中,在用户之间或用户本身(具有多个属性)之间保留消息的问题。这样说来,例如,在应用程序中,需要保持具有多个属性的对象的大集合。有一些方法可以做到这一点:

  • 要使用PHP保持对象的序列化版本,请执行以下操作:serialize
  • 将对象的每个属性保留在表的不同列中
  • 使用PHP:simplexmlement::asXML创建对象的XML版本并保留与其关联的字符串
  • 这些程序在性能(内存/处理)方面是否存在显著差异(优势/优势)


    欢迎任何帮助

    选项2(每个属性一列)是一种远优于存储序列化或其他结构化字符串表示(如XML1)的策略,原因很简单,对象表示数据,数据库设计用于以关系方式存储和检索数据,同时与应用程序逻辑分离

    您可以查询值、组合值、将值与表示其他对象类型的其他表相关联。数据库本身经过高度优化,可以执行您可能希望在应用程序中执行的查询、排序、加入等操作。如果以序列化的形式存储对象,则会丢失所有这些数据,并且对象的数据仍然完全绑定到代码,在代码中必须将其取消序列化或解码,以便重新构造为对象并使用,更糟糕的是,它仍然冻结在自己的数据结构中,无法轻松与应用程序中的其他对象类型关联

    这是web应用程序设计的基础之一。当数据需要具有持久性状态时,将对象属性存储到数据库列中,其中的行可以实例化为对象,这在web应用程序中几乎是一种通用模式,并且您可以在任何编程语言中找到的任何应用程序框架都将以通常类似的方式实现这一点。exist可自动完成从表中的数据库存储到代码中的对象的双向转换

    如果您对探索PHP的ORM感兴趣。此外,我建议检查一些PHP应用程序框架是如何实现其模型存储和检索的——Symfony、Laravel、CakePHP等。有些人依赖于类似ORM的学说,另一些人使用自己的方法



    1专门构建的JSON文档存储引擎(如CouchDB或MongoDB)在这里的作用域有所不同,这里只讨论将PHP直接序列化到XML列或XML列中。何时使用专用的NoSQL解决方案是一个更广泛的话题,每个方面都有很多意见。

    感谢您的回答。在非常特殊的情况下,我在MySQL中保留社交网络的好友列表,选项2仍然是最好的模式吗?模式1:在userdata表的一列中保留用户朋友的序列化对象。模式2:一个不同的表,包含两列,所有关系如下:第1行:用户1,用户2。第2行:用户3、用户5…2更好-通常情况下,您会有一个表来标识每个用户的详细信息,还有一个表将用户作为朋友连接在一起,其中有一列表示userid,另一列表示friendid,两者都指向users表。这创造了一种多对多关系,任何用户都可以作为朋友与任何其他用户链接。联接表中的每一行正好代表2个朋友之间的1个关系。若要解除某人的好友关系,请删除该行。再次感谢!!(:-)我认为这似乎是最好的解决方案,但我想核实一下。这种方式正是我将消息从一个用户保存到另一个用户的方式。一种表格,其中每一行都是一条消息,其中包含消息的id、发送者的id、接收者的id、日期、状态(新的、旧的)、主题等。。。非常感谢。