类别,子类别和关键字过滤数据的数据库设计

时间:2016-12-20 18:34:18

标签: mysql database-design

我正在创建一个列出本地商家的应用程序,并按类别,子类别和关键字对它们进行分组。以下是有关业务分类的规则:

  • 企业可以属于多个类别和子类别
  • 企业可以有多个关键字
  • 并非每个类别都有子类别,但那些类别只有两个级别(类别 - >子类别)
  • 子类别可以属于多个类别

另外值得一提的是,客户已经在excel文档中给出了我的业务列表,其中包括:

  • 每个类别都是单独的标签页或
  • 每个页面都包含企业列表,地址,关键字和子类别
  • 业务'子类别在子类名称
  • 的列中以“X”指定

我一直试图通过数据透视表来解决这个问题,但这导致了我很多支点(category_subcategory,business_keyword,business_category),我担心这会对性能产生重大影响。将根据过滤器确定要显示哪些商家的查询。

我认为我走在正确的轨道上,但我觉得有一种更优化的方式来解决这个问题。

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读了所有这些,我认为你应该制作这些表格:

企业
id,name等。

关键字
id,word等。

类别
id,name等。

子类别
id,name等。

categories_subcategories
id,category_id,subcategory_id

businesses_categories
id,business_id,category_id

businesses_subcategories
id,business_id,subcategory_id

businesses_keywords
id,business_id,keyword_id

答案 1 :(得分:0)

正确的方法是拥有这样的东西:

1.Business(id(* PK),name,...)
2.Keyword(id(* PK),关键字,......)
3.Category(id(* PK),name,parent_category(* FK),...)
4.Bis_cat(bis_id(* FK),cat_id(* FK),...)
5.Bis_key(bis_id(* FK),keyword_id(* FK),...)

其中(* PK)是主键,(* FK)是外键。

在此模型中,您将使用递归来获得无限的子类别。如果你想100%确定你想要有任何错误,你也可以添加参考完整性,但这是对数据库的一个非常严格的限制,所以如果你知道怎么做就把它放进去。