我正在开发一个php项目,该项目需要存储有关各种建筑物的信息,并将根据建筑物的类型存储不同类型的信息:
Class Building {
var $location
var $name
}
建筑类将通过房屋和办公室等类进行扩展,因此类将如下所示(仅作为示例)
Class House Extends Building {
var $numRooms;
var $numBathrooms;
}
Class Office extends Building {
var $offices;
var $sqfoot;
}
问题是,这应该如何在数据库中表示(如果重要的话,我使用 MySQL)。我应该使用构建表来存储位置和名称,然后为其他每个类创建一个表来保存“扩展”变量吗?或者我为每个班级创建一个表?或者构建表是否应该包含其他类中所有变量的列?
我强烈建议您查看类表继承 http://www.martinfowler.com/eaaCatalog/classTableInheritance.htmlMartin Fowler 定义的模式。
例如,此设计模式创建一个表来保存所有建筑物通用的数据,然后需要一个单独的表来存储与特定类型建筑物相关的任何数据。我发现有用的一件事是在父表中存储“类型”字段,以便您知道自己拥有什么类型的实体,而无需在子表中搜索相应的记录。
我建议除非您有非常具体、明确的理由来使用实体属性设计,否则请避免使用它。一方面,当使用这种类型的设计时,不可能利用数据库的约束来控制需要哪些输入以及允许哪些类型的值。另一方面,它将大大减慢任何需要从这些类型的字段中提取数据的查询,因为存储在这些字段中的数据无法像通常那样进行索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)