我正在努力與數據模型(我使用MySQL的數據庫)。我對自己的想法感到不安。如果有人可以提出更好的方法,或者指出一些參考問題,我將不勝感激。掙扎與數據建模問題
該數據將有許多類型的組織。我正在嘗試做一個3級分類(類,類別,類型)。說,如果我有「意大利餐廳」,這將有如下分類
食品服務>餐館>意大利
然而,一個組織可以屬於多個組。一家餐館也可以服務中國和意大利。因此,將適用於2個分類
食品服務>餐館>意大利
食品服務>餐館>中國
分級參考表將是這樣的:
ORG_CLASS(RowId的,ClassCode,類名)
1, FOOD, Food Services
ORG_CATEGORY(RowId的,ClassCode,CategoryCode ,類別名稱)
1, FOOD, REST, Restaurants
ORG_TYPE(RowId的,ClassCode,CategoryCode,類型碼,類型名)
100, FOOD, REST, ITAL, Italian
101, FOOD, REST, CHIN, Chinese
102, FOOD, REST, SPAN, Spanish
103, FOOD, REST, MEXI, Mexican
104, FOOD, REST, FREN, French
105, FOOD, REST, MIDL, Middle Eastern
實際的數據表將是這樣的:
我將允許最多組織3個分類。我將有3個GroupId,每個指向ORG_TYPE中的一行。所以,我有我的ORGANIZATION_TABLE
ORGANIZATION_TABLE(OrgGroupId1,OrgGroupId2,OrgGroupId3,ORGNAME,OrgAddres)
100,103,NULL,MyRestaurant1, MyAddr1
100,102,NULL,MyRestaurant2, MyAddr2
100,104,105, MyRestaurant3, MyAddr3
在添加數據,一個對話框,可以讓用戶選擇clssa,類別,類型和相應的可以使用ORG_TYPE表中的rowid填充GroupId。
搜索過程中,如果選擇了所有三種分類,它將更具體。例如,如果
食品服務>餐館>意大利人的標準,where子句是'where OrgGroupId1 = 100'
如果只有2個水平選擇
餐飲服務>餐廳
我必須做的'where OrgGroupId1 in (100,101,102,103,104,105, .....)'
- 該列表中可能有一百個
我將不允許進行課程級別搜索。那就是我會強制選擇一個班級和類別
這些ID是整數。我正在嘗試查看性能問題和其他問題。
總的來說,這項工作?或者我需要拋出並從頭開始。
這可能是矯枉過正你的目的,但有關管理的層次化數據的好文章:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html – trickwallett 2011-01-13 12:14:08
感謝鏈接。這確實是一個很好的參考。它確實讓我有另一種分類選擇。文章中的這種方法更加靈活,並且不會限制分類的數量級別。 – rpat 2011-01-14 17:01:19
@trickwallet:該文章不在此地址。它現在在這裏:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ – 2011-08-05 18:44:44