OO-PHP中的后端应用程序:高效构造类/表

OO-PHP中的后端应用程序:高效构造类/表,php,oop,orm,pdo,datamapper,Php,Oop,Orm,Pdo,Datamapper,我目前正在开发一个应用程序后端(业务目录)。主“参与者”是一个“条目”,它将具有: - main category - subcategory - tags (instead of unlimited sub-levels of division) 我对OOP非常陌生,但我仍然想在这里使用它。数据库是MySql,我将使用PDO 为了弄清楚我应该使用什么样的数据库表结构来支持上述条目分类,我考虑了Wordpress使用的一个解决方案——通过几个表(术语、分类法、关系)在条

我目前正在开发一个应用程序后端(业务目录)。主“参与者”是一个“条目”,它将具有:

- main category
    - subcategory
        - tags (instead of unlimited sub-levels of division)
我对OOP非常陌生,但我仍然想在这里使用它。数据库是MySql,我将使用PDO

为了弄清楚我应该使用什么样的数据库表结构来支持上述条目分类,我考虑了Wordpress使用的一个解决方案——通过几个表(术语、分类法、关系)在条目和CAT/子类别/标记之间建立关系。目前阻止我使用此解决方案的是,任何类型的每个关系都由relationships表中的一行表示。如果我有50000个条目,附加到一个特定条目上:主cat、subcat和最多15个标签可能会减慢应用程序的速度(或者我错了)

然后我学习了一些关于表数据网关的知识,这似乎是一个很好的解决方案,因为我喜欢每个类有一个表的想法,但是后来我读到,实际上没有办法成功地解决OOP和关系映射之间的阻抗错配

有没有其他适合这种情况的方法?我想我会选择:

  • t透镜
  • TBL范畴
  • tblsubcategory
  • tbltag

结构。关系将基于父ID,但我想知道这是否足够?我可以在这里使用外键和级联删除选项吗(这是我不太熟悉的,在我看来,这是建立表中元素之间关系的一种更直观的方式)?

有一个存储表之间关系的表是一个好主意,通过索引和仔细思考,您可以快速获得结果

由于每个条目必须表示两个实体之间不同类型的链接(子类别到主条目,标记到子类别),因此您至少需要(最多)三个字段:

  • id1(或第一个实体的唯一id)
  • linkid(链接到第四个表,其中描述了每个链接)
  • id2(或第二个实体的唯一id)
这三个字段可以也应该编制索引

现在,实现这种多对多关系的第四个表将描述链接的性质。由于表中存在许多不同类型的关系,因此不能在同一个表中保留类型(的子项、的标记、的父项)

第四个表(参考)可以如下所示:

id     nature     table1    table2
1      parent of  entry     tags
2      tag of     tags      entry
表1字段告诉您第一个id所指的表,表2也是如此

id是关系表中两个字段之间的数字。只应为id字段编制索引。自然字段更适合于人类读者,而不是用于连接表或组织数据