Django 您将如何为这些数据库关系建模?(用户、能力、兴趣)

Django 您将如何为这些数据库关系建模?(用户、能力、兴趣),django,database,rest,django-rest-framework,data-modeling,Django,Database,Rest,Django Rest Framework,Data Modeling,我使用的是Django系统,事实上这很简单,但有一件事让我很烦恼,我想这一定是一个更好的方法 基本上,它是一个内部工具,用于搜索公司现有的开发人员,根据他们的技能和兴趣将他们分配到项目中 因此,让我们假设员工John可以添加一个主题对他的能力列表做出反应,并从1到5颗星中选择他的技能级别,这意味着1=完全初学者,5=专家。他还可以从1到5之间选择兴趣级别。所以你可以有一个如下的列表 DB的设计方式如下: 包含所有相关用户信息的表用户 表knowledge\u主题中有[id,label]列,其中

我使用的是Django系统,事实上这很简单,但有一件事让我很烦恼,我想这一定是一个更好的方法

基本上,它是一个内部工具,用于搜索公司现有的开发人员,根据他们的技能和兴趣将他们分配到项目中

因此,让我们假设员工John可以添加一个主题对他的能力列表做出反应,并从1到5颗星中选择他的技能级别,这意味着1=完全初学者,5=专家。他还可以从1到5之间选择兴趣级别。所以你可以有一个如下的列表

DB的设计方式如下:

包含所有相关用户信息的表用户 表knowledge\u主题中有[id,label]列,其中label只是语言/技术的名称 表knowledge\u level,包含[id、knowledge\u level、interest\u level、topic\u id、user\u id]列,其中topic\u id与knowledge\u topic表建立关系,user\u id与user表建立关系

能力列表端点可以给出如下结果,例如:

[
    {
        "id": 2,
        "topic": {
            "id": 8,
            "label": "Docker"
        },
        "interest_level": 4,
        "knowledge_level": 2,
        "user": 2
    },
    {
        "id": 5,
        "topic": {
            "id": 9,
            "label": "Flask"
        },
        "interest_level": 1,
        "knowledge_level": 2,
        "user": 2
    },
    {
        "id": 1,
        "topic": {
            "id": 1,
            "label": "React"
        },
        "interest_level": 4,
        "knowledge_level": 4,
        "user": 2
    },
    {
        "id": 16,
        "topic": {
            "id": 3,
            "label": "SCSS"
        },
        "interest_level": 2,
        "knowledge_level": 1,
        "user": 1
    },
    {
        "id": 136,
        "topic": {
            "id": 2,
            "label": "Django"
        },
        "interest_level": 1,
        "knowledge_level": 1,
        "user": 3
    },
    {
        "id": 137,
        "topic": {
            "id": 9,
            "label": "Flask"
        },
        "interest_level": 1,
        "knowledge_level": 1,
        "user": 3
    },
    {
        "id": 138,
        "topic": {
            "id": 3,
            "label": "SCSS"
        },
        "interest_level": 1,
        "knowledge_level": 1,
        "user": 3
    }
]
如你所见,这里的“独特性”与用户+知识的结合紧密相连。因此,每次我让用户添加新的能力时,我都会在knowledge_Competency表中添加一行,这对我来说是不必要的

有没有更好的方法,还是我想得太多了?我在想,也许创建一个表interest,其中包含字段[id,level]和competency,还包含[id,level],也许在这两个表中都有一个“label”字段,以便对级别的含义进行文本描述。然后我可以建立一个用户->主题->能力和用户->主题->兴趣的关系链。这样,两个表始终有5行(能力和兴趣级别),主题始终限于该公司所有员工的语言范围,用户限于所有员工。只有当确实有新员工或新主题时,数据库中几乎没有任何数据可添加。这是一个好的设计吗?

我会为“开发人员”和“技能”建立一个表格

然后创建一个表“dev_skill”,将dev与技能相关联,并添加额外的数据:“兴趣”和“经验”

有一个关于如何使用django的示例: