哪个是分类项目的最佳设计?

时间:2013-01-17 05:26:48

标签: vba ms-access database-design user-interface relationship

我有四个级别用于根据属性对项目进行分类。某些项目可能不需要所有子类别级别,并且某些项目可能共享相同的子类别值。

示例:

Category1   Category2   Category3   Category4
---------   ---------   ---------   ---------
Jewelry     Ring        Wedding
Jewelry     Bracelet    Serpentine 
Jewelry     Necklace    Serpentine
Equipment   Tool        Power       Drill                
Equipment   Tool        Hand        Jigsaw
Accessory   Battery     AA
Accessory   Movie       DVD         Action
Accessory   Game        PS3         Combat 

我希望查找表包含与每个项目相关的值,以便当用户从第一个类别的下拉列表中选择一个值时,下一个子类别中的相应值将自动下拉(级联),等等上。

我将预定义大多数常见项目的不可删除,不可更新的值,但是我无法提供所有可能的项目,我希望允许用户在第二级别添加值。

对每个项目进行分类的目的是提供一种统一的方法来描述项目和查询以有效地返回所有需要的项目。

问题:

  1. 如何确保用户添加的新值能够正确链接到父值或子值?

  2. 我应该允许用户添加新的类别和子类别,还是应该强制他们只选择预定义的值,如果他们的项目不适合其中一个预先定义的值,请选择“其他”值并输入自由形式的评论?

  3. 目前的方法是我定义了最好的方法还是你有更好的建议?

  4. 以下是我定义的当前表格和关系:

    enter image description here

    Columns        MS-Access     Informix   Comments
    -------------- ------------  --------   ----------------------------------------
    Primary keys   Autonumber    SERIAL  
    Foreign keys   Long Integer  INTEGER 
    English        Text          VARCHAR    Description in English language.
    Spanish        Text          VARCHAR    Description in Spanish language.
    NonDelete      Yes/No        CHAR(1)    Cant delete predefined value if TRUE.
    NonUpdate      Yes/No        CHAR(1)    Cant update predefined value if TRUE.
    Deleted        Yes/No        CHAR(1)    User-defined value cant be used anymore. 
    StockKeptUnit  Yes/No        CHAR(1)    Non-serialized inventory item if TRUE.
    

2 个答案:

答案 0 :(得分:1)

根据定义他们是否正确链接?毕竟,这就是PK / FK关系的重点。

可能创建新的tlkpItemCat2涉及选择有效的父tlkpItemCat1,否则INSERT将失败。只要将tlkpItemCat2.ItemCat1_SIID定义为NOT NULL,就可以确保有效关系。

这并不能保证最终用户没有宣称领带是一个动力工具,但这是一个完全不同的问题。


现在,根据这个确切问题(对象分类)的经验,我可以告诉你,尽管这个设计看起来非常优雅和有用,但从可用性的角度来看却很糟糕。您的用户必须事先知道层次结构 才能快速找到项目的正确类别。一旦最终用户开始为您的层次结构添加级别,它就会变成一个来回的死胡同搜索的噩梦,试图找到正确的Cat1 / Cat2 / Cat3组合来应用 - 这会导致任何事情的发生 - 只能通过这个屏幕分类。

更好的方法是让用户只需输入'Jigsaw',然后返回一行清单:

Did you mean:
 []   Equipment | Tool       | Power  | Jigsaw
 []   Equipment | Tool       | Hand   | Jigsaw
 []   Game      | Childrens  | Jigsaw
 []   Accessory | DVD-Movie  | Horror | Jigsaw
 []   ... or [something else]?

是的,这是更多的工作,但从UI和UX的角度来看,值得。

答案 1 :(得分:1)

这应该允许无限的类别。您需要通过UI或OnChange事件强制执行非孤立。

enter image description here

然后您的表格内容将如下所示:

enter image description here

enter image description here

enter image description here