Моноинженерные отношения базы данных и связанные поля - PullRequest
0 голосов
/ 06 марта 2020
import mongoengine

def global_init():
    mongoengine.register_connection(alias="core", name="project")

class Worker(mongoengine.Document):
    username = mongoengine.StringField()
    salary_per_hour = mongoengine.FloatField()

    total_hours_worked = ********[1]

    meta = {
        "db_alias": "core",
        "collection": "users"
    }

class Project(mongoengine.Document):
    name = mongoengine.StringField()
    associated_users = mongoengine.ListField(ReferenceField(User))
    progress = mongoengine.EmbeddedDocumentField(Progress)

    meta = {
        "db_alias": "core",
        "collection": "projects"
    }

class Contrib(mongoengine.Document):
    project = mongoengine.ReferenceField(Project)
    user = mongoengine.ReferenceField(User)
    hour = mongoengine.FloatField()

    meta = {
        "db_alias": "core",
        "collection": "contribs"
    }

class Progress(mongoengine.EmbeddedDocument):
    total_hours = ********[2]
        percentage = ********[3]
    total_cost = ********[4]

Привет, я пытаюсь построить отношения между работником и проектом с mongoengine. Будут разные проекты и работники. Вклады будут основными входами в программу. Мне нужны эти базы данных для будущих функций. Я хочу построить некоторые отношения между базами данных, а не обновлять все в зависимости от ввода. Например:

[1] общее количество рабочих часов рабочего.

[2] работников total_hours работало над этим проектом.

[3] непрерывный процентный расчет проекта с процентное соотношение в зависимости от указанного рабочего часа.

[4] стоимость проекта до настоящего времени зависит от работников salary_per_hour и их рабочего времени

Я новичок в базах данных SQL и не знаю не знаю, правильно ли я все написал. Можно ли построить эти отношения между базами данных с некоторыми функциями отображения? Я не знаю, что я должен использовать для них или есть какие-либо необходимые изменения в коде для правильной работы. Можете ли вы написать пример или предложить мне несколько источников для изучения этих вещей. Я потерял документацию mongoengine за последние 2 часа, но не смог удовлетворить свои потребности.

Спасибо за вашу помощь заранее.

1 Ответ

1 голос
/ 07 марта 2020

ну, вы бы не использовали отдельную базу данных .... вы были бы в одной базе данных и потенциально имели бы разные коллекции. но, основываясь на ваших 4 ключевых требованиях к выводу, я бы посоветовал просто сохранить его единым с одной коллекцией - и спроектировать ваше приложение так, чтобы оно содержало поля / данные, удовлетворяющие вашим 4 требованиям к выводу ... это преимущество No SQL - не разбивайте вещи на части, а затем соединяйте их - вместо этого просто сложите все данные вместе ...

вы обычно не хотите вводить агрегированные суммы, так как этот расчет лучше выполнять на выходе, поэтому просто рассчитайте входные данные ... просто введите гранулированные данные в полях / формате, которые облегчат выполнение ваших сводных запросов ....

...