php-扩展数据库中的类

我正在一个PHP项目中,该项目需要存储有关各种建筑物的信息,并将根据建筑物的类型存储不同类型的信息:

Class Building {
    var $location
    var $name
}

Building类将由House和Office等类扩展,因此这些类看起来像这样(仅作为示例)

Class House Extends Building {
    var $numRooms;
    var $numBathrooms;
}

Class Office extends Building {
    var $offices;
    var $sqfoot;
}

问题是,该如何在数据库中表示(如果重要,请使用MysqL).我应该使用构建表来存储位置和名称,然后为其他每个类创建一个表以容纳“扩展”变量吗?还是为每个班级创建一个表格?还是构建表应该包含其他类中所有变量的列?

最佳答案
我强烈建议您看一下Martin Fowler定义的Class Table Inheritance模式.

此设计模式将创建一个表,该表包含例如所有建筑物的公用数据,然后针对与特定建筑物类型相关的任何数据需要一个单独的表.我发现有帮助的一件事是在父表中存储一个“类型”字段,这样您就不必在子表中搜索相应的记录即可知道所拥有的实体类型.

我建议除非您有非常明确的明确定义的理由使用实体属性设计,否则应避免使用它.一方面,使用这种类型的设计来利用数据库的约束来控制需要哪些输入以及允许哪些类型的值变得不可能.另一方面,它将大大降低所有需要从这些类型的字段中拉出数据的查询的速度,因为无法像通常那样对存储在这些字段中的数据进行索引.

相关文章

昨天的考试过程中,有个考点的服务器蓝屏重启后发现Mysql启动不了(5.6.45 x32版本,使用innoDB),重装后...
整数类型 标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩...
一条 SQL 查询语句结构如下: SELECT DISTINCT <select_list> FROM <left_table&...
数据备份 1. 备份数据库 使用 mysqldump 命令可以将数据库中的数据备份成一个文本文件,表的结构和数据...
概述 在实际工作中,在关系数据库(MySQL、PostgreSQL)的单表数据量上亿后,往往会出现查询和分析变慢...
概述 触发器是 MySQL 的数据库对象之一,不需要程序调用或手工启动,而是由事件来触发、激活,从而实现...