【发布时间】:2012-06-15 18:44:48
【问题描述】:
假设我有一个 Table1,包含三列:ID(主键、身份)、A 和 B
现在,假设我有 3 个方法,假设它们在列方面没有任何共同之处:
方法一:C、D、E
方法2:F、G、H、I
方法三:J
我可以做一张桌子: ID、A、B、C、D、E、F、G、H、I、J、M
其中 M 是方法的名称(或方法 ID)。
但是,如果 90% 的时间使用方法 3,则会有很多空值。
这是一个问题吗?如果是这样,有没有更好的方法来设置它?
如果我将每个方法都设为自己的表实体,我如何确保每个 ID 都有一个与之匹配的方法?
如果我将其保留为一张表,如何确保仅填写 C、D、E,如果 M 为 1,则 F 到 J 为 NULL?
好吧,似乎有些人难以抽象思考,所以我将创建一个随机的具体示例来应用上述内容:
假设我有人们进行锻炼的记录。
每条记录总是有一个 ID(用于唯一标识事件)、TIME_STARTED 和 TIME_ENDED。
但是,根据他们进行的练习,需要不同的属性。假设只有三个练习:
椭圆机:INCLINE、LEVEL、SPEED
仰卧起坐:User_Weight、Reps、Delay、Extra_Weight
硬拉:Weight_Lifted
每个 ID 只能有一个“方法”。应用它,请参阅上面的问题。
【问题讨论】:
-
方法是什么意思?如果您的表只有 ID、A、B,那么 c,d,e,f,g,h,i,j,m 来自哪里?
-
您可能在这里问错了问题。最好从“我需要存储 X 数据,最佳架构是什么?”开始。就目前而言,由于我们没有上下文,因此很难提供帮助,不知道 ABCDEFGHIJM 是什么,但听起来您的方向非常错误。
-
假设,我记录了一次测试运行,ID、A 和 B 始终是每次运行的一部分。但是,如果运行是使用方法 1 完成的,我需要将值存储在列 C、D 和 E 中。这可能是与运行方法 2 需要列 F、G、H、I 等不同的数据类型。
-
@M_M 它是故意通用的,我认为这是一个基本的东西。对不起,如果您觉得它太抽象了。
-
抽象和模糊不是一回事。无论哪种方式,最大的问题是,您希望在存储数据后如何处理这些数据?
标签: sql-server database-design