猿问

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

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



翻翻过去那场雪
浏览 877回答 3
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等)

哈士奇WWW

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