gpt4 book ai didi

sql-server - 用于跟踪随时间推移的进度的数据库设计

转载 作者:太空狗 更新时间:2023-10-30 01:54:02 24 4
gpt4 key购买 nike

我有一个看似简单的问题,但我想不出解决办法。我正在创建一个数据库设计来存储目标。目标是手动更新的,每次更新目标时我都需要一个条目。例如:

减掉 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 - 字符串?

这是最好的追踪方式吗?有没有人看到我可以构建的基本模式来完成这个?

我的另一个想法是可以对我所有的原始数据使用这种设计,并依靠存储过程和 View 以我想要的方式呈现数据吗?

编辑:

抱歉,我会详细说明一下。区间 X 和 Y 将是图表上的区间值。所以如果 X = 1 和 Y = 10 那么 x 轴将变为 1,2,3,... Y 将变为 10,20,30,...(这完全是另外一回事,我需要找出最好的实现的方式,但现在是次要的)

目标的类型很棘手,因为有很多我想做的。它们需要是一堆不同的数据类型:

目标示例:

每日阅读 - bool 值

减掉 10 磅 - int 或 float

节省 5000 美元 - 金钱或 float

达到销售配额 - float

学习一门新语言——字符串? (不确定跟踪这个的最佳方式)

等等..希望这有助于澄清一点

最佳答案

您肯定走在正确的轨道上。我唯一可以推荐的另一件事是研究关键值(value)指标,并在您的设计中使用这一原则。 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

如果我每天多骑 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%。您可能背熟了语法并且掌握了 10,000 个单词,但是在您花一些时间说这门语言之前,您还没有学会它。

通过调整转换表中的权重,您可以开始以一种对您有意义的方式相互比较目标。我有能力减掉 10 磅,但没必要,所以我不会为此付出过高的代价。然而,我的 friend 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)
)

关于sql-server - 用于跟踪随时间推移的进度的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com