好的我正在建立一个电子邮件应用程序,只有当他们满足某些要求(例如年龄,位置或爱好)时才允许您给人们发送电子邮件。
我无法弄清楚这两个字段的位置,以便我的数据库正确规范化(mail_pref_min_age | mail_pref_max_age)。
我想将它们放在配置文件表中,但我得到很多空值,因为人们不总是指定允许通过电子邮件发送的最小和最大年龄,这是应用程序的一个选项。我觉得没有规范化,任何人都有第二意见或更好的方法来做到这一点。我是否可以在一列中有一堆空值。
先谢谢。
参见示例
个人资料表
User id | username | mail_pref_min_age | mail_pref_max_age
1 | joe | 25 | 50
2 | matt | null | null (this feels unnormalized to me)
3 | jake | null | null (this feels unnormalized to me)
个人资料表
settingsID | userID | mailsettingID
1 | 1 | 1
2 | 1 | 2
邮件表
mailID | mailsetting
1 | must live in USA
2 | must live in Canada
答案 0 :(得分:1)
有两种可能的方法可以实现:您可以使用空值来表示没有上限/下限,或者(如注释中指示的@mlt)您可以使用“极端”非空值来设置边框 - - 例如0表示最小年龄,以及最大年龄(例如,如果这是一个tinyint值,则最大年龄可以设置为255)。
一些优点和缺点:
最终,如果你能够采用极端值,那么你就可以避免Nulls所造成的所有努力和痛苦。
答案 1 :(得分:0)
正式地,与任何可空字段的关系甚至不能转到1NF。此外,使用空值会使您的逻辑变得更加复杂。要解决此问题,您可以使用默认值或将mail_pref_min_age
和mail_pref_max_age
提取到单独的表中。