3

Вопрос по database, sql-server – Разработка базы данных для отслеживания прогресса во времени

У меня, казалось бы, простая проблема, но я не могу найти решение. Я создаю дизайн базы данных для хранения целей. Цели обновляются вручную, и мне нужна запись каждый раз, когда цель обновляется. Например:

Потерять 10 фунтов:

День 1: потерял 1 фунт. День 3: потерял 2 фунта. день 7: потерял 7 фунтов.

И затем, как только общее количество фунтов достигнет суммы цели, эта цель будет достигнута. Вот мой дизайн, но я вижу некоторые проблемы с ним:

Goals Table:

GoalId - int - PK

UserId = int - FK

GoalTypeId = int - FK

Название - строка

Progress Table:

ProgressId - int - PK

GoalId - int - FK

IntervalX - строка?

IntervalY - строка?

GoalAmount - Строка?

Это лучший способ отследить это? Кто-нибудь видел там базовую схему, из которой я могу сделать это?

Еще одна мысль, которая у меня возникла, - возможно, использовать этот дизайн для всех моих необработанных данных и полагаться на хранимые процедуры и представления для представления данных так, как я хочу?

РЕДАКТИРОВАТЬ:

Извините, я немного уточню. Интервал X и Y будут значениями интервала на графике. Так что, если X = 1 и Y = 10, то ось х будет идти 1,2,3, ..., а Y будет 10,20,30, ... (Это что-то еще, мне нужно выяснить лучший способ реализации, но это на заднем плане пока)

Типы целей хитры, потому что я бы хотел сделать много. Они должны быть разных типов данных:

Примеры целей:

Читайте ежедневно - булево

потерять 10 фунтов - int или float

сэкономить 5000 долларов - деньги или плавающие

Хит продаж квоты - плавать

Выучить новый язык - строку? (не уверен, что лучший способ отследить это)

И так далее. Надеюсь, это поможет немного уточнить

  • Error: User Rate Limit Exceeded

    от ledgeJumper
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Krishna Deepak
  • 1

    Error: User Rate Limit Exceeded

    Goals(Goal_ID, User_ID, Goal_Type_ID, Title, Goal_Amount)
    Progress(Goal_ID, Date_Time, Progress)
    
    PK_Goals(Goal_ID)
    PK_Progress(Goal_ID, Date_Time)
    
    FK_Progress_Goals(Goal_ID)
    

  • 1

    Error: User Rate Limit Exceeded

    Goal Table

    GoalType Table

    Progress Table

    User Table

    How I implement the logic

  • 6

    Error: User Rate Limit Exceeded

    1 pound = 2 KVI
    1 day without sugar = 1 KVI
    1 mile = 1/30 KVI
    

    Lose 10 pounds: KVIType="Weight Loss", Target=20KVI, cap=100%
    No sugar for period (let's say 2 weeks):KVIType="Days without sugar", target=14KVI, cap=100%
    Cycle 15 miles per day: KVIType="Cycling", target=7KVI, cap=200%
    

    Learn language grammar = 100 KVI, which you can work as a percentage of a grammar course completed, for example
    1000 words vocabulary = 100 KVI
    Conversation = 20 KVI
    

    CREATE TABLE KVIType (
        KVITypeId INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
        KVIName VARCHAR(50),
        Description VARCHAR(200),
        Multiplier DOUBLE PRECISION
    )
    
    CREATE TABLE Goal (
        GoalId INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
        UserId INT FOREIGN KEY REFERENCES User(UserId),
        GoalName VARCHAR(50),
        GoalStart DATETIME,
        GoalComplete DATETIME,
        TargetKVI DOUBLE PRECISION,
        CurrentKVI DOUBLE PRECISION
    )
    
    CREATE TABLE Milestone (
        MilestoneId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
        GoalId INT FOREIGN KEY REFERENCES Goal(GoalId),
        KVITypeId INT FOREIGN KEY REFERENCES KVIType(KVITypeId),
        MilestoneName VARCHAR(50),
        Description VARCHAR(200),
        TargetKVI DOUBLE PRECISION,
        CurrentKVI DOUBLE PRECISION,
        TargetDate DATETIME,
        CompletedDate DATETIME,
        Cap INT)
    
    CREATE TABLE Progress (
        ProgressId INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
        MilestoneID INT FOREIGN KEY REFERENCES Milestone(MilestoneId),
        InputValue DOUBLE PRECISIoN,
        KVIValue DOUBLE PRECISION,
        OccuranceDate DATETIME
    )
    
    CREATE TABLE User (
        UserId INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
        UserName VARCHAR(100)
    )
    

  • 1

    Error: User Rate Limit Exceeded

    UserTable

    GoalTable

    ProgressTable