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

时间:2014-02-22 18:03:52

标签: php oop orm pdo datamapper

我目前正在开发app后端(业务目录)。主“演员”是一个“条目”,它将具有:

- main category
    - subcategory
        - tags (instead of unlimited sub-levels of division)

我对OOP很新,但我还是想在这里使用它。数据库是MySql,我将使用PDO。

为了弄清楚我应该使用什么数据库表结构来支持上面的条目分类,我正在考虑Wordpress使用的解决方案 - 通过几个表建立条目和cats / subcats /标签之间的关系(术语,分类,关系)。目前阻止我解决这个问题的原因是任何类型的每个关系都由关系表中的一行表示。我将拥有50,​​000个条目,附加到特定条目:主要猫,subcat和最多15个标签可能会减慢应用程序速度(或者我错了)?

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

您认为是否有其他方法适合这种情况?我想我会参加:

  • tblentry
  • tblcategory
  • tblsubcategory
  • tbltag

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

1 个答案:

答案 0 :(得分:1)

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

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

  • id1(或第一个实体的唯一ID)
  • linkid(链接到描述每个链接的第四个表)
  • id2(或第二个实体的唯一ID)

这三个字段可以而且应该被编入索引。

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

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

id     nature     table1    table2
1      parent of  entry     tags
2      tag of     tags      entry

表1字段告诉您第一个id引用哪个表,同样使用table2

id是关系表中两个字段之间的数字。只应将id字段编入索引。自然领域更适合人类读者,然后用于连接表格或组织数据