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

3

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

Потерять 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 долларов - деньги или плавающие

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

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

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

какие цели могут присутствовать. Является ли упомянутый, единственный тип, который может быть опубликован? Также, как вы будете отслеживать прогресс, так как есть номер вместе с текстом Krishna Deepak

Ваш Ответ

1   ответ
6

что я могу порекомендовать, это изучить ключевые показатели и использовать этот принцип в своем дизайне. KVI (или KPI, как они называются в управлении) являются значениями разнородных источников, которые преобразуются в общий набор значений, которые могут обрабатываться с использованием общей логики. Это поможет добиться прогресса в достижении целей, имеющих вехи разных типов, а для сложных целей это очень важный шаг. Я немного уточню это:

Цель определяется как достижение определенного этапа или комбинации этапов в течение определенного периода. Веха - это значение, которое должно иметь общее значение обработки или показатель ключевого значения. Например, потеряв 10 фунтов, вы можете получить тип ключевого значения «Потеря веса», преобразовав 1 фунт в 1 КВИ. Если вы хотите сравнить вехи друг с другом, вы можете настроить вес. Например, я хочу стать более стройным и чувствовать себя более энергичным (цель). Чтобы сделать это, я должен сбросить 10 фунтов, отказаться от сахара из своего рациона и проехать не менее 15 миль в день (вехи). При сравнении этих значений 1 миля не равняется 1 фунту. Больше похоже на 30 миль. Вырезать сахар из моей диеты нелегко, но давайте назовем КВИ «Дни без сахара» и дадим каждому дню без сахара значение, эквивалентное половине фунта. КВИ тогда:

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

Если я езжу дополнительно 15 миль в день, я, вероятно, могу простить себе немного сахара, так что это должно быть вписано в основные этапы. Другими словами, я могу достичь 200% своего этапа в велоспорте и только 75% своего уровня сахара и при этом достичь своей общей цели. Тем не менее, я не могу пройти через это и все еще ожидать чувствовать себя здоровым. Поэтому моя веха для этой цели будет выглядеть примерно так:

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

В этом примере каждый рубеж будет стоить 100%. Вы можете знать грамматику наизусть и иметь за плечами 10000 слов, но пока вы не потратили некоторое время на изучение языка, вы его не изучали.

Регулируя веса в таблице переходов, вы можете начать сравнивать цели друг с другом так, чтобы это имело смысл для вас. Я могу позволить себе потерять 10 фунтов, но мне это не нужно, поэтому я бы не стал слишком высоко ценить эту цену. Мой друг Лука, однако, имеет избыточный вес на 100 фунтов и имеет вес по состоянию здоровья, поэтому у него будет более высокое значение KVI для этого. Вы также можете подробнее рассказать о том, как вехи объединяются, чтобы обеспечить индикацию прогресса в достижении цели (т. Е. С использованием суммы всех 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)
)

Похожие вопросы