需要有关构建数据库的建议。全部在一张桌子上还是分开?

Posted

技术标签:

【中文标题】需要有关构建数据库的建议。全部在一张桌子上还是分开?【英文标题】:Need Advice on building the database. all in one table or split? 【发布时间】:2010-12-31 06:47:22 【问题描述】:

我正在为一家房地产公司开发应用程序。我面临的问题是关于实现数据库。但是我只是对采用哪种方式感到困惑,如果您能帮助我推理数据库实现,我将不胜感激。

这是我的情况。

a) 我必须将属性详细信息存储在数据库中。

b) 物业有大约 4-5 个类别,例如:住宅、商业、工业等。

c) 现在类别有子类别。例如。住宅类别将具有子类别,例如。公寓/独立屋/别墅/农家/工作室公寓等,因此商业和工业或农业也将有子类别。

d) 每个子类别都必须存储不同的值。像居民一样,将具有卧室/厨房/大厅/浴室等功能。这些功能取决于子类别。

有关我希望如何实现我的应用程序的示例,您可以查看此站点。

http://www.magicbricks.com/bricks/postProperty.html

我可能会想到这样的解决方案。

a) 根据将存在的类别创建四到五个表(问题是类别将来可能会增加)。

b) 为所有功能、位置、价格、描述创建不同的表,并将公共属性表合并为一个。例如,所有属性都将具有共同的实体,例如位置、总面积等。

鉴于目前的情况,您对我有什么建议。

谢谢

【问题讨论】:

【参考方案1】:

为了正确实现这一点,您需要了解(阅读)数据库规范化。 每个实体都需要自己的表。您将有以下表格:

对象(不动产对象) 类别 交易类型 ...等

如果您有分层类别,严格按照树形结构组织,您可能希望将其实现为树形结构,全部存储在一个表中。如果存在重叠的可能性,则意味着您需要为每个表设置不同的表,例如:

属性类型 propertyRatings 属性可用性 ...等

【讨论】:

谢谢塔昆。这对我理解基础很有帮助。【参考方案2】:

通常,您可以为每个属性“类型”创建一个包含“类型”特定信息的表,但也可以有一个相应的“通用”表,其中包含所有类型之间的公共字段,例如“价格”、“地址”等...

这就是 MLS 数据的结构。

【讨论】:

【参考方案3】:

属性类别是 gen-spec 设计模式的另一个例子。

关于 gen-spec here is the link 的先前讨论。

【讨论】:

以上是关于需要有关构建数据库的建议。全部在一张桌子上还是分开?的主要内容,如果未能解决你的问题,请参考以下文章

使用多线程代码在一张表上发生 MySQL 死锁

将用户数据单独存储在数据库中

Word怎样在一张纸上放多张图片

为点赞/点赞建模——每种类型一张桌子,还是一张大桌子?

SELECT 语句上的 Laravel 数学运算

Laravel 软删除在一张表中不起作用