用户可以有3种类型的配置文件:A,B,C
对于每种类型的个人资料,用户可以拥有不同的名称,照片集和说明。
应该如何建模呢?
单个表中的单独列:
profile
---
name_A name_B name_C photos_A photos_B photos_C description_A description_B description_C
加入另一张桌子:
profile
---
A_profile_id B_profile_id C_profile_id
A_profile
---
id name photos description
B_profile
---
id name photos description
C_profile
---
id name photos description
jsonb by field:
profile
---
name{A,B,C} photos{A,B,C} description{A,B,C}
jsonb按个人资料类型:
profile
---
A_profile{name,photos,description} B_profile{name,photos,description} C_profile{name,photos,description}
嵌套jsonb(诱惑......):
profile
---
profile{A{name,photos,description},B{name,photos,description},C{name,photos,description}}
答案 0 :(得分:1)
如果您要拥有一组固定的不同配置文件,那么播放关系数据库的强度应该会导致您选择"加入另一个表"选项。
其他每个选项都稍微灵活一点,但基本上只是一个非规范化版本。
答案 1 :(得分:0)
假设所有配置文件都相同,那么我首先想到的是两个表:
create table Profiles (
profileId serial,
. . .
);
create table Persons (
personId serial,
. . .
profile_A int references profiles(profileId),
profile_B int references profiles(profileId),
profile_C int references profiles(profileId)
);
尽管有三个不同列可能有充分的理由,但您可能还需要一个联结表:
create table personProfiles (
personProfileId serial,
personId int references person(personId),
profileId int references profiles(profileId),
profileTye <whatever>
);