访问查询 - 相互比较多个用户选择

时间:2011-02-18 07:36:47

标签: sql database database-design ms-access

我遇到了一个我无法在脑海中征服的概念性问题。

假设我希望用户通过表单输入他们当前穿戴的数据库。将“T恤”和“蓝色”投入新的行非常容易。但是,假设我想将一个用户与其他用户进行比较,并按照从最相似到最低的顺序排列。

当您考虑可用选项的数量时,这将成为一场巨大的噩梦。

  • 汗衫
  • Overshirt
  • 夹克
  • 围巾/项链
  • 头饰
  • 裤子
  • 内衣
  • 护腿
  • 袜子
  • 附件

在我看来,我可以在上面的11个类别中进行硬编码,让用户从为每个类别量身定制的投递箱中进行选择。现在,让我们使用'Undershirt'和'Overshirt'的例子。根据人的不同,可以使用长袖衬衫;他们还穿着一件。如果我让用户将值放在类别​​中,则用户A可以将其放在一个中,而用户B可以放在另一个类别中。而且他们不会因此而被比较,单独的类别。

现在,我可以将每个项目放入自己的行并按用户ID搜索,而不是在类别中进行硬编码(从而限制用户可以输入的数量)。但是,让我们说有一天一个人穿着短裤,然后穿着牛仔裤和一件衬衫。我怎样才能确保它们被单独比较(例如,与短裤相比,连衣裙与牛仔裤+衬衫相比),而不是(短裤+牛仔裤+衬衫相比)。

至于实际比较,每个项目相互之间可以通过2d查找表来执行。 (Row Dress vs. Column Jeans将净零,Row Dress vs. Column Dress将净一个)

2 个答案:

答案 0 :(得分:1)

适当的设计取决于可接受的误差范围。如果没有可接受的错误,则必须向用户显示类别,并为每个用户指定true / false yes / no,或者从一组有限的可能答案中进行选择。

      HANDS:
             gloves
             mittens
             brass knuckles

             [Caveat: user could be wearing brass knuckles inside the mittens. You have to take into account
             whether values are mutually exclusive or not. Barefoot <> no socks.
              Someone who is barefoot is not wearing socks but someone not wearings socks may be wearing docksiders]


      FEET1: 
             anklet socks
             sheer stockings
             fishnet stockings
             ragg wool hiking socks
             kneesocks
             gym socks
             no socks


      FEET2: 
           mocassins
           running shoes
           sandals 
           wing-tips
           uggs
           spike heels               
           ...


      HEAD: 
            sombrero
            beret
            baseball hat
            pirate's hat
            beanie
            knitted cap

      NECK:
            scarf
            mock turtleneck aka dickie

Et cetera等等,令人作呕。

或者,如果误差幅度非常大,您可以允许简单的自由形式文本输入和匹配/部分匹配单词。稍微少一点的错误:您可以设置一个同义词表并匹配所提供单词的同义词。

答案 1 :(得分:0)

作为一般规则,请确保数据库设计正确,并担心以后报告。如果这不仅仅是一个思考练习,你可能想说出你实际比较的内容,因为有了上述内容,一个人很可能会说“燕尾服”或“晚礼服”,并且可以推断细节,而在其他一些领域,这可能是不可能的。即便如此,似乎每个项目至少需要三列(字段):

Timestamp
Major category (jeans, trousers, skirt)
Item (Levi's, tweeds, mini)

如果准确性特别重要,您需要经过培训的面试官:)

我刚刚注意到该列表中的内衣,这更复杂,因为对于一个特定年龄的女士而言,什么才有资格作为完整的内衣,这与十年的绅士绝不相同。