1

我目前有3张桌子:

Drug
  id
  name

DrugAlias
  drug_id
  name

Patient
  first_name
  last_name
  drug_alias_id

Drug 跟踪科学名称(例如:对乙酰氨基酚),而 DrugAlias 是药物的子代,跟踪其他可能的名称(例如:阿司匹林、乙酰苯胺、乙酰氨基酚、扑热息痛等)。

患者可以服用一种药物,但我在 Patient 表中跟踪 DrugAlias 而不是 Drug,因为我希望能够记住患者喜欢称特定药物的名称。换句话说,我想记住病人叫对乙酰氨基酚阿司匹林。

问题是这不允许患者调用对乙酰氨基酚对乙酰氨基酚,除非我每次创建药物时都要创建一个与药物同名的药物别名,这会产生一些重复。

我想知道其他人是否有任何其他解决方案来解决这个问题?

谢谢!

4

2 回答 2

0
Drug
  dr_id    PK
  dr_name  FK

DrugAlias
  dra_id    PK one to one with dr_id
  dra_name  
  dr_name   - from the Drug table

Patient
  pat_id    PK
  first_name
  last_name
  dra_id    FK
  dra_name  FK

您的问题是结构和设计之一。波西米亚一句话就说得好。

这适用于具有关系数据库环境的设计。您可以使用正确的键、正确的连接和一个好的查询来实现您想要的一切。

于 2012-11-22T21:05:14.187 回答
0

坦率地说,我认为将真实姓名存储为别名的想法是一个绝妙的主意。

它简化了逻辑并反映了现实——这种药物可以在别名表中被称为任何东西。

父表我们用于报告,子表用于搜索。这对我来说很有意义。

那么,如果有一点点数据重复怎么办。删除重复引入了很多复杂性,几乎没有任何收获。此外,保持科学名称与别名相同的名称同步也不存在数据维护问题,因为科学名称永远不会改变。

于 2012-11-22T20:50:46.517 回答