postgresql 当你在不同的类别中有相同的标签时该怎么办?

bvjveswy  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(113)

我正在为我的新应用程序设计数据库。在应用程序中,有一个业务配置文件,其中包括类别和标签。根据类别的不同,会显示不同的标记。我有一个关于标签在不同类别中重复的情况的问题。
示例:
类别:俱乐部标签:屋顶
类别:餐厅标签:屋顶
我曾想过创建相同的标签两次,并将其与每个类别相关联。

azpvetkf

azpvetkf1#

您所描述的是类别之间的多对多(M:M)关系:标签。这是一个非常常见的场景,通常通过引入第三个表(我们称之为profiles)来解决,该表包含其他相关表的id和任何交集数据(与组合相关的数据)。您不重复类别或标签。类似于:(参见demo

create table categories (category_id   integer  generated always as identity
                                                primary key
                        , name         text     not null
                                                unique
                        , description  text
                        );

create table tags(tag_id   integer  generated always as identity
                                    primary key
                 ,name     text     not null 
                                    unique
                 );

create table profiles(category_id integer not null 
                                          references categories(category_id)
                     ,tag_id      integer not null 
                                          references tags(tag_id)
                     ,effective_dt date   not null default current_date
                     ,constraint   profiles_pk 
                                           primary key(category_id, tag_id)
                     );

相关问题