我正在设计一个医疗保健表格数据库。我们使用多种形式,用户id和年份是唯一标识。目前我每个表单都有一个表,每个表都有一个用户 ID 和主键年份:例如,表 health_form_1、pk (user_id, year) 各种特定于表单的列。table health_form_2, pk (user_id, year) 各种特定于表单的列。
看着一组都具有相同主键的表,我感到很奇怪。有一个更好的方法吗?
数据库表不应映射到您的表单。相反,这些表应该映射到您的系统正在建模的真实世界实体。
例如,如果您正在开发医疗计费系统,那么您可能有如下表格:
ETC...
这些表中的每一个都有自己的主键。
这种方法的问题在于,如果业务需求发生变化(例如,用户可以在一年内多次创建相同的表单),您将不得不更改主键,这尤其是当它在其他地方也用作外键时会出现问题。
相反,我将为每个表创建一个代理自动增量主键,并在 UserID 和 Yeart 列上创建一个 unqiue 索引或约束。
此外,许多 ORM 在单个 PK 上工作得更好,它可以使您的查询更加简洁。