为了账号安全,请及时绑定邮箱和手机立即绑定

在建模和规范化时如何处理空值?

在建模和规范化时如何处理空值?

我是SQL(仍在学习中)的新手,我必须为场所创建一个数据库。客户预订活动室。问题在于客户不总是提供他们的姓名,电子邮件和电话号码。在大多数情况下,它是姓名和电子邮件或姓名和电话。这很少是全部3种,但确实会发生。我需要将它们分别存储在各自的属性(名称,电子邮件,电话)中。但是他们给我他们的信息的方式,我有很多空值。这些空值怎么办?有人告诉我最好不要有null。在那之后,我还需要规范化我的表。有任何建议请。
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

首先,数据库中的空值没有错。并且正是出于此目的而制作的(未知属性)。在我看来,避免数据库中的空值是毫无意义的建议。

因此,您将具有三个(或四个)值-用于标识客户的名称(名字/姓氏,电子邮件地址和电话号码)。您可以将它们放在表中并向其添加约束,以确保始终至少填充这些列中的一个,例如coalesce(name, email, phone) is not null。这样可以确保无法完全匿名完成预订。

根据您的解释,您不清楚是否总是会收到来自客户的相同信息。那么,发生客户预定一个房间并提供其姓名,然后又预定另一个房间并提供其电话的情况发生了吗?还是会在数据库中查找客户,找到他们的名字以及分配给他们的两个预订?在后一种情况下,您可以拥有一个客户表,其中包含您到目前为止所获得的所有信息,并且预订中将包含客户记录ID作为对此数据的引用。在前一种情况下,您可能不希望有一个clients表,因为您无法识别两个客户端(Jane Miller和mrsx@gmail.com)是真的是两个不同的客户端还是实际上只是一个客户端。

我到目前为止看到的表:

  • 房间(room_id,...)

  • 地点(venue_id,...)

  • 客户(client_id,姓名,电子邮件,电话)

  • 预订(venue_id,room_id,client_id等)


查看完整回答
反对 回复 2019-11-20
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

如上所述,通常不需要这样做。没有价格的产品就是没有最终确定的产品。我们尚未决定价格。没有删除日期的部门仍处于活动状态,尚未(从逻辑上)删除。没有默认增值税的产品组就没有默认增值税,每个产品的增值税必须明确命名。我们创建数据库;我们知道缺少价值意味着什么。

查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 803 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信