如何为具有多对多关系的业务目录设置mySQL表结构?

时间:2011-04-26 10:49:13

标签: php mysql database-design many-to-many

我正在尝试为业务目录规划我的表结构,其中我将有多个子类别和多个业务列表的多个父类别,所有这些都需要多对多的关系。

例如

夜晚

俱乐部和社团
公共房屋
餐馆
出租车和私人租用车辆
剧院和音乐厅
酒吧

餐馆

中国/东方 小酒馆
鱼和薯条
印度
意大利
公共房屋
海鲜
西班牙语

运输和承运人

航空租约和租赁
航空公司
Car / Van Hire Self Drive
快递和配送服务
物业/物业重新定位服务
货运服务和代理商
运输承包商
邮局和服务
重新定位服务
出租车和私人租用车辆
范希尔

如您所见,餐厅既是主要类别又是子类别。出租车和私人租车属于运输和承运人夜间出行,在所有这些类别下,在最低级别,我将拥有商家信息。我不会允许企业提交他们自己的列表,而是根据要求自己添加。商家信息最多可包含6个类别。

我正在努力为我的数据库找到最佳的表格结构,并且非常感谢任何建议。我是php / mySQL的新手。

1 个答案:

答案 0 :(得分:2)

你可以有一个类别表,它将包含所有可能的类别/子类别的列表,然后在你的信息表中有它,以便有一个CategoryID字段和一个SubCategoryID,你要么子类别为NULL或者相应的id。


您也可以使用映射表对其进行映射,这样您就可以拥有任意数量的类别/子类别。

Category Table ( CategoryId, CategoryName )
Business Table ( BusinessId, BusinessName )
Category Mapping Table ( BusinessId, CategoryId, IsCategory )

IsCategory将是一个BIT字段,因此您可以将业务的任意数量的类别标记为SubCategory(0)或Category(1)。

在类别映射表上,我将制作PRIMARY KEY(BusinessId,CategoryId),并分别将它们作为Business / Category表的FOREIGN KEY。