首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应该为没有唯一键的数据库表中的每一行生成唯一的id吗?

问应该为没有唯一键的数据库表中的每一行生成唯一的id吗?
EN

Stack Overflow用户
提问于 2012-01-13 23:17:38
回答 4查看 2.8K关注 0票数 0

我正在为一家处理病人医疗记录的初创公司设计一个MySQL数据库。我有几个表可以没有唯一键:医疗条件、过敏症、家族史等。例如,medications表可能有字段patient_id、med_name、usage_dates、dosage、reason等。唯一保证的唯一键是所有字段在一起。

web应用程序可以通过选择for patient_id轻松地检索给定患者的这些数据,但除非可以保存指向具有多个用户的数据库中的行的指针,否则它在我看来是一个用于编辑或删除该表中的行的笨拙系统。DBMS必须为每个字段的值进行选择,以便找到正确的行。根据我对数据库的了解(很少),我认为在大型数据库中这可能是低效的。

在每个表中创建一个带有ID号的新字段作为主键是否更有效,或者DBMS方式比我更聪明,这是完全没有必要的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-13 23:24:48

您总是可以添加一个简单的数字主键(例如mysql auto_increment),这样您就可以为每一行添加一个唯一的标识符。如果您必须在外键关系中使用表,则复合主键是一个非常痛苦的问题,它会迫使您在所有joins/FK规范中列出每个主键的组件字段。相比之下,添加一个简单的int主键将使您只需为FK/join关系携带一个字段。

我会建议一些类似的东西:

代码语言:javascript
复制
patients (id, name, ....)
meds (id, brand, name, ...)
patient_meds (patient_id, med_id, dosage, ...)
票数 2
EN

Stack Overflow用户

发布于 2012-01-13 23:21:37

是的,这将被称为“合成键”,我肯定会添加一个,可能只是一个AUTO_INCREMENT字段。如果你这样做,它将使更新变得更简单(更快)。

票数 1
EN

Stack Overflow用户

发布于 2012-01-13 23:23:22

我认为ID字段几乎总是一个好主意。它保证有一列可用于唯一标识数据库中的一行。我还认为这是一个好主意,因为它可以使查询更快,因为表的主键是有索引的,所以如果您根据唯一ID列进行选择,MySQL不必搜索所有行来查找您要查找的行。它确切地知道去哪里,你的查询将运行得更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8852758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档