我即将开始开发一个分类web应用程序。但是我面临着一些困难在构建DB设计时:
用户可以在不同类型的已有分类(如车辆、房地产、计算机、教育等)下发布广告。但是每个类别都有其特定的字段/属性以及一些通用的字段/属性。
我的困难就像在填写了一个帖子广告之后,比如说自行车,我把常见的I/p值保存到我的advertisement_t表中(如下所示)。但是我将在哪里存储特定于Bike的其他字段值:Bike Manufacture, Bike Model, Bike Year等?
同样,如果用户想发布房屋(租金)广告,我可以将常见的I/p值保存到我的advertisement_t表中。但是我将在哪里存储特定于房屋出租的其他字段值,如:总面积(平方),房间数量等,以及我将如何映射。My Tables are below:
category_id
------------
(catId, parentCatId, cat_title, cat_desc)
advertisement_t
----------------
(adId, catId, userId, ad_title, ad_desc, photoId, postDate, statusId, price, ad_address, adValidFrom, adValidTo, adIsDeleted)
Photo_t
--------
(photoId, primary_photo, sec_photo1, sec_photo_2, sec_photo_3)
user_t
-------
(userId, username, password, email, activationkey, isvalidated, joinedDate, activatedDate, statusId)
我不知道其他分类网站(如olx, freeadd)是如何维护的。在他们的数据库中显示他们发布的广告数据。
如果有人有任何想法,请帮忙。
我通常喜欢将这些数据分为两组(1)可搜索的数据,将保存在某些列/映射到列中;(2)垃圾数据(我称之为additional_info)保存在json_encoded格式的文本列中。
对于可搜索的列,您可以添加另一个表category_values table,它具有(category__id, category_value, ad_id)
同样,如果您的数据库预计会随着类别类型的频繁重复而增长,您可以将category_values表拆分为两个as(value_id, Category_id, category_value)和(value_id, ad_id)。这将导致更多的连接,我相信在您的情况下不需要引入。
我曾经做过类似的事情。
我可以看到2个选项:你不应该做的事情——为所需的商品(房子,汽车,自行车,…)实现很多表格,这不是一个很好的主意,因为工作永远不会结束,它不会扩展。
我的建议:
添加3个表:
CustomField(设置类别可能使用的字段列表)
(CFid、标题)
CategoryCField(关联关系,知道当用户输入新广告时显示哪些字段)
(catId CFid)
StoredCFData(实际存储数据)
(id, adId, fid, value)
你可以找到两个这样做的问题。建立一个"关系圈"不是很好,但如果做得仔细,就会起作用。并且必须将服装字段的DataType减少为文本/数字以使其简单。在单选按钮或组合框上应用它会有问题。
最好的运气,劳尔