我遇到了一个我无法在脑海中征服的概念性问题。
假设我希望用户通过表单输入他们当前穿戴的数据库。将“T恤”和“蓝色”投入新的行非常容易。但是,假设我想将一个用户与其他用户进行比较,并按照从最相似到最低的顺序排列。
当您考虑可用选项的数量时,这将成为一场巨大的噩梦。
在我看来,我可以在上面的11个类别中进行硬编码,让用户从为每个类别量身定制的投递箱中进行选择。现在,让我们使用'Undershirt'和'Overshirt'的例子。根据人的不同,可以使用长袖衬衫;他们还穿着一件。如果我让用户将值放在类别中,则用户A可以将其放在一个中,而用户B可以放在另一个类别中。而且他们不会因此而被比较,单独的类别。
现在,我可以将每个项目放入自己的行并按用户ID搜索,而不是在类别中进行硬编码(从而限制用户可以输入的数量)。但是,让我们说有一天一个人穿着短裤,然后穿着牛仔裤和一件衬衫。我怎样才能确保它们被单独比较(例如,与短裤相比,连衣裙与牛仔裤+衬衫相比),而不是(短裤+牛仔裤+衬衫相比)。
至于实际比较,每个项目相互之间可以通过2d查找表来执行。 (Row Dress vs. Column Jeans将净零,Row Dress vs. Column Dress将净一个)
答案 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)
如果准确性特别重要,您需要经过培训的面试官:)
我刚刚注意到该列表中的内衣,这更复杂,因为对于一个特定年龄的女士而言,什么才有资格作为完整的内衣,这与十年的绅士绝不相同。