我正在一个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模式.
此设计模式将创建一个表,该表包含例如所有建筑物的公用数据,然后针对与特定建筑物类型相关的任何数据需要一个单独的表.我发现有帮助的一件事是在父表中存储一个“类型”字段,这样您就不必在子表中搜索相应的记录即可知道所拥有的实体类型.
我建议除非您有非常明确的明确定义的理由使用实体属性设计,否则应避免使用它.一方面,使用这种类型的设计来利用数据库的约束来控制需要哪些输入以及允许哪些类型的值变得不可能.另一方面,它将大大降低所有需要从这些类型的字段中拉出数据的查询的速度,因为无法像通常那样对存储在这些字段中的数据进行索引.