在多对多关系数据库表上设置PK的最佳实践是什么?它如何影响Hibernate的使用?

2022-01-17 13:15:45 标签 databasehibernatespring-data-jpardbms

我有以下的疑问是关于什么是使用关联表实现数据库表之间的多对多关系的最佳实践。

我正在做一个使用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更好?

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码