Php 扩展数据库中的类

Php 扩展数据库中的类,php,mysql,database-design,Php,Mysql,Database Design,我正在从事一个php项目,该项目需要存储有关各种建筑物的信息,并将根据建筑物的类型存储不同类型的信息: Class Building { var $location var $name } Building类将通过诸如House和Office之类的类进行扩展,因此这些类将如下所示(只是一个示例) 问题是,这应该如何在数据库中表示(如果重要的话,我使用MySQL)。我应该使用building表来存储位置和名称,然后为其他每个类创建一个表来保存“扩展”变量吗?还是为每个类创建一个表

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

Class Building {
    var $location
    var $name
}
Building类将通过诸如House和Office之类的类进行扩展,因此这些类将如下所示(只是一个示例)


问题是,这应该如何在数据库中表示(如果重要的话,我使用MySQL)。我应该使用building表来存储位置和名称,然后为其他每个类创建一个表来保存“扩展”变量吗?还是为每个类创建一个表?或者建筑表应该为其他类中的所有变量设置列吗?

如果想法是不让一堆表和字段复杂化,我只需创建一个用于建筑的表,然后为数据添加两个字段,其中一个字段将定义建筑类型(即:房屋、办公室等)另一个是扩展类对象数据的序列化


但我认为最好的方法实际上取决于您需要对数据库进行何种查询。例如,如果您需要查询数据库以选择所有带有“$numRooms>5”的“房屋”,序列化可能不是最佳选择…

我强烈建议您查看Martin Fowler定义的模式

此设计模式创建一个表,该表包含所有建筑共有的数据(例如),然后需要一个单独的表来存储与特定建筑类型相关的任何数据。我发现有一件事很有用,那就是在父表中存储一个“type”字段,这样您就可以知道您拥有什么类型的实体,而不必在子表中搜索相应的记录

我建议您避免使用实体属性设计,除非您有非常具体、定义明确的理由。首先,当使用这种类型的设计来利用数据库上的约束来控制需要哪些输入以及允许哪些类型的值时,就不可能了。另一方面,它将大大降低需要从这些类型的字段中提取数据的任何查询的速度,因为存储在这些字段中的数据无法像通常那样编制索引。

这与(我的)相同,请在那里检查答案。
Class House Extends Building {
    var $numRooms;
    var $numBathrooms;
}

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