我正在编制一个存储扑克会话数据的网站。会话是玩扑克赌场的一段时间。会话包含诸如日期/时间,会话的净利润/损失以及他们播放的位置等信息。但是,我感到困惑的是如何处理会话类型。在扑克中有两种游戏:现金游戏和锦标赛。每个都有自己的特定领域,只有 。这是一个示例表(我已删除了不相关的字段):
+----+--------------+--------+--------+
| id | session type | stakes | buy-in |
+----+--------------+--------+--------+
| 1 | cash | 1/3 NL | NULL |
| 2 | cash | 1/2 NL | NULL |
| 3 | tournament | NULL | $20 |
+----+--------------+--------+--------+
如您所见,如果会话类型为现金,我不需要buy-in
。同样,如果会话类型是锦标赛,我不需要stakes
字段。
我如何规范化我的表,以便我没有NULL字段?性能方面,如果我正常化此表只是为了使我的行中没有NULL值,那么我的应用程序是否会受到影响?
答案 0 :(得分:2)
以下是一种可能的解决方案:
<强>会话强>
id_session (PK)
session_type (Integer/Enum)
<强> cash_sessions:强>
id_session (FK)
stakes
<强> tournament_sessions:强>
id_session (FK)
buy_in
因此,每个会话类型都有单独的表,因此您可以为不同的类型定义不同的列,在sessions
表中也有共同的列
示例数据:
sessions
1 1
2 1
3 2
cash_sessions
1 1/3 NL
2 1/2 NL
tournament_sessions
3 $20
另一种解决方案:
<强>会话强>
id_session (PK)
session_type (Integer/Enum) <- basically useless field for this schema
<强>属性:强>
id_attr (PK)
name (String)
<强> session_attributes:强>
id_session (FK)
id_attr(FK)
value (String)
所以,而不是考虑&#34;会话类型&#34;您可以更改业务模型以考虑&#34;会话属性&#34;,因此,不同的会话可以分配不同的属性集
示例数据:
sessions
1 1
2 1
3 2
attributes
1 stakes
2 buy_in
session_attributes
1 1 1/3 NL
2 1 1/2 NL
3 2 $20