我有以下的疑问是关于什么是使用关联表实现数据库表之间的多对多关系的最佳实践。
我正在做一个使用Spring Data JPA和Hibernate映射的Spring Boot项目,为了选择一个好的解决方案,我也需要考虑这个方面。
所以基本上在我的数据库中,我创建了这个portal_user_user_type关联表,将portal_user和user_type表连接在一起(一个用户可以有多个用户类型,同时一个特定的用户类型可以与多个用户相关):
CREATE TABLE IF NOT EXISTS public.portal_user_user_type
(
id bigint NOT NULL,
portal_user_id bigint NOT NULL,
user_type_id bigint NOT NULL,
CONSTRAINT portal_user_user_type_pkey PRIMARY KEY (id),
CONSTRAINT portal_user_user_type_to_portal_user FOREIGN KEY (portal_user_id)
REFERENCES public.portal_user (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT portal_user_user_type_to_user_type FOREIGN KEY (user_type_id)
REFERENCES public.user_type (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
它将正常工作。我怀疑的是主键。我知道我可以避免使用整数PK。我知道可能从理论上的观点,也许更好的是在我的两个字段portal_user_id和user_type_id设置复合PK,避免额外的字段。但我在思考:
对于所有其他的表,我使用一个自动递增的整数PK,这里也将保持这个标准(可能不是那么重要)。
使用一个自动递增的PK允许我对关系进行排序(我可以很容易地知道之前在我的表中插入了什么记录)。
我正在使用Hibernate映射,我不确定如果不添加一个单独的PK,它是否工作良好(或者如果使用其他一些orm,将来可能被其他微服务使用不同的技术实现)
你觉得这个话题怎么样?是使用包含两个FK的复合PK更好,还是使用一个int型的自动递增PK和两个FK更好?