led*_*per 4 database sql-server
我有一个看似简单的问题,但我无法找到解决方案.我正在创建一个数据库设计来存储目标.目标是手动更新的,每次目标更新时我都需要输入一个条目.例如:
减掉10磅:
第1天:丢失1磅.第3天:减掉2磅.第7天:减掉7磅.
然后,一旦总磅数达到目标数量,该目标就完成了.到目前为止,这是我的设计,但我看到了一些问题:
目标表:
GoalId - int - PK
UserId = int - FK
GoalTypeId = int - FK
标题 - 字符串
进度表:
ProgressId - int - PK
GoalId - int - FK
IntervalX - 字符串?
IntervalY - 字符串?
GoalAmount - 字符串?
这是追踪这个的最佳方式吗?有没有人看到我可以建立的基础架构来实现这一目标?
我的另一个想法是将这个设计用于我的所有原始数据,并依靠存储过程和视图以我想要的方式呈现数据?
编辑:
对不起,我会详细说明一下.区间X和Y将是图表上的区间值.因此,如果X = 1且Y = 10,那么x轴将变为1,2,3,......并且Y将变为10,20,30,......(这完全是我需要弄清楚的最好的东西)实施的方式,但现在是关于加强的方法)
目标类型很棘手,因为我想做很多事情.它们需要是一堆不同的数据类型:
目标示例:
每日阅读 - 布尔值
输掉10磅 - 整数或浮动
节省5000美元 - 钱或浮动
达到销售额 - 浮动
学习一门新语言 - 字符串?(不确定追踪这个的最好方法)
等等.希望这有助于澄清一点
你是在正确的轨道上.我可以推荐的另一件事是研究关键价值指标,并在您的设计中使用这一原则.KVI(或KPI,因为它们在管理中被引用)是不同来源的值,它们被转换为可以使用通用逻辑处理的一组公共值.这将有助于推进具有不同类型里程碑的目标的进展,对于复合目标,这是至关重要的一步.我会详细说明一下:
目标定义为在特定时期内达到某个里程碑或里程碑组合.里程碑是需要具有共同处理价值或关键价值因素的价值.例如,减掉10磅,你可以有一个键值类型的"减肥",将1磅转换为1 KVI.如果您希望将里程碑相互比较,您可能希望调整权重.例如,我希望变得更健康,感觉更有活力(目标).为了做到这一点,我必须减掉10磅,从我的饮食中减少糖,每天至少骑行15英里(里程碑).比较这些值时,1英里不等于1磅.更像是30英里.从我的饮食中减少糖分并不容易,但让我们称之为KVI"没有糖的日子",每天不加糖就相当于半磅的价值.那么KVI就是:
1 pound = 2 KVI
1 day without sugar = 1 KVI
1 mile = 1/30 KVI
Run Code Online (Sandbox Code Playgroud)
如果我每天多跑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%
Run Code Online (Sandbox Code Playgroud)
学习一门新语言就是一个很好的例子.这需要学习语言的语法细微差别,有时候是一个不同的字母表,一个全新的词汇表,然后将它们全部捆绑在一起进行日常使用.所以这是一个例子:
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
Run Code Online (Sandbox Code Playgroud)
在此示例中,您将每个里程碑限制为100%.你可能会心里清楚地知道语法,并且掌握了10,000个单词,但是直到你花了一些时间说这种语言,你还没有学会它.
通过调整转换表中的权重,您可以开始以对您有意义的方式比较目标.我可以承受减掉10磅但不需要的费用,所以我不会在那个价格上加太高的价格.然而,我的朋友Luka体重超重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)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |