我正在设计一个系统,允许用户指定他们对其过敏的物品。当他们开始将每个过敏原绑定到文本字段中时,我打算提供自动完成样式的建议,以便他们可以从其中一个建议中进行选择,或者自己完成过敏原的键入。建议列表将来自查询表,该查询表将仅包括最常见的过敏原。
我从查找表中提供建议没有问题,但我正在尝试找出在数据库中保存相关过敏原的最佳方法,其中这些过敏原可以是已经存在于查找表中的东西,也可以是用户自定义的东西(并且不会添加到查找表中)。我能想到两种可能的解决方案,但它们似乎都不完美。
选项1将每个用户过敏原存储为文本,如下所示:
用户: id,名称
allergen_lookup:名称
user_allergies: user_id,过敏原
在本例中,allergen_lookup和user_allergies表之间没有关系,user_allergies.allergen是一个文本字段。这个问题本质上归结为(缺乏)规范化,但至少它支持自定义过敏原,而不需要额外的表。
选项2使用额外的表来存储自定义过敏原,如下所示:
用户: id,名称
allergen_lookup: id,名称
user_allergies: user_id,allergen_id
user_custom_allergies: user_id,custom_allergy
在本例中,user_allergies.allergen_id链接到allergen_lookup.id。user_allergens表用于存储用户与已知过敏原(来自查找表)之间的关联,user_custom_allergies表用于跟踪未知过敏原(不在查找表中的过敏原)。这样做的问题是使用两个表来跟踪相同类型的信息(用户过敏原)。
所以,我为冗长的描述道歉,但是对于如何最好地存储它有什么建议吗?
提亚
发布于 2016-06-11 00:39:16
你可能把问题复杂化了,但如果我没有问到问题,请告诉我。
我将如何处理这个问题:
我会有一个用户,userAllergies和过敏表- userAllergies是交叉表。
这将允许您在用户键入时向用户显示数据库当前存储的所有过敏症。这也将允许您拥有一个规范化的数据库,其中的数据不会重复。这是因为交叉表将允许您将过敏症与用户关联,而不会干扰过敏性表。
只是一些对未来的建议。使用范式过程来解决您的数据库问题。它将帮助您确定数据库的结构和采取的最佳方法。
https://stackoverflow.com/questions/37752989
复制相似问题