在MySQL中,建议我将“药物”的多个选择选项存储为一个单独的表user_drug,其中每一行都是特定用户选择的选项之一。我还被建议创建第三个表drug,该表描述表user_drug中选择的每个选项。下面是一个示例:
user
id name income
1 Foo 10000
2 Bar 20000
3 Baz 30000
drug
id name
1 Marijuana
2 Cocaine
3 Heroin
user_drug
user_id drug_id
1 1
1 2
2 1
2 3
3 3如您所见,表user_drug可以包含特定用户选择的多个药物,而表drug则告诉您每个drug_id指的是什么药物。
有人告诉我,外键应该把user_drug和drug绑在一起,但是我从来没有处理过外键,所以我不知道该怎么做。
是不是更容易摆脱药物表,简单地将每种药物的文本值存储在user_drug中?,为什么不?
如果添加第3表drug 更好,那么如何实现外键结构,以及如何使用这些外键检索相应的值?
(我发现只使用两个表要容易得多,但我听说Foreign很有帮助,因为它们确保输入了适当的值,而且搜索和排序drug_id的速度也比文本值快得多,因此我想确定。)
发布于 2011-10-05 14:57:31
是不是更容易摆脱药物表,只将每种药物的文本值存储在user_drug中?为什么或者为什么不?
通常,你会在药物表上有很多其他的列,比如描述,医疗信息,化学性质等等。在这种情况下,你不会想在user_drug表的每一条记录上重复所有这些信息。然而,在这种情况下,您只有一个专栏,所以这个问题并不是什么大问题。
另外,您希望确保user_drug表中引用的药物确实存在。例如,如果您将字段存储为文本,那么您可能会有海洛因及其相关的拼写错误,如haroin或herion。这会给你带来问题,当你试图选择所有海洛因记录以后。使用查找表的外键强制在该表中存在id,因此您可以绝对确定所有对海洛因的引用都是准确的。
https://stackoverflow.com/questions/7663187
复制相似问题