我正在设计一个系统,允许用户指定他们过敏的项目。当他们开始将每个过敏原绑在一个文本字段中时,我打算提供自动填充式的建议,以便他们可以从其中一个建议中选择或者自己完成过敏原的输入。建议列表将来自查询表,其中仅包含最常见的过敏原。
我从查询表中提供建议没有问题,但我正在试图找出在数据库中保存相关过敏原的最佳方法,其中这些过敏原可能是已经在查找表中的某些东西,或者是自定义给用户(并且不会添加到查找表中)。我可以想到两种可能的解决方案,但它们似乎都不完美。
选项1将每个用户的过敏原存储为文本,如:
user:id,name
allergen_lookup:名字
user_allergies:user_id,过敏原
在这种情况下,allergen_lookup和user_allergies表之间没有关系,user_allergies.allergen是一个文本字段。这个问题基本上归结为(缺乏)标准化,但至少它支持自定义过敏原而不需要额外的表格。
选项2使用额外的表来存储自定义过敏原,如:
user:id,name
allergen_lookup:id,name
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表用于跟踪未知过敏原(不在查找表中的过敏原)。这个问题是使用两个表来实质上跟踪相同类型的信息(用户过敏原)。
所以,我为这篇冗长的描述道歉,但是有关如何最好地存储这些内容的任何建议?
TIA
答案 0 :(得分:0)
你可能会过于复杂,但告诉我,如果我没有回答问题。
我将如何处理这个问题:
我会有一个用户,userAlergies和过敏表 - userAlergies是交集表。
这将允许您显示数据库当前在用户输入时存储的所有过敏症。这也将允许您拥有一个不重复数据的规范化数据库。这是因为交叉表将允许您将过敏与用户联系起来,而不会干扰过敏表。
对未来提出一些建议。使用正常的表单过程来破坏数据库问题。它将帮助您确定数据库的结构和最佳方法。