我有四个级别用于根据属性对项目进行分类。某些项目可能不需要所有子类别级别,并且某些项目可能共享相同的子类别值。
示例:
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
我希望查找表包含与每个项目相关的值,以便当用户从第一个类别的下拉列表中选择一个值时,下一个子类别中的相应值将自动下拉(级联),等等上。
我将预定义大多数常见项目的不可删除,不可更新的值,但是我无法提供所有可能的项目,我希望允许用户在第二级别添加值。
对每个项目进行分类的目的是提供一种统一的方法来描述项目和查询以有效地返回所有需要的项目。
问题:
如何确保用户添加的新值能够正确链接到父值或子值?
我应该允许用户添加新的类别和子类别,还是应该强制他们只选择预定义的值,如果他们的项目不适合其中一个预先定义的值,请选择“其他”值并输入自由形式的评论?
目前的方法是我定义了最好的方法还是你有更好的建议?
以下是我定义的当前表格和关系:
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.
答案 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事件强制执行非孤立。
然后您的表格内容将如下所示: