如何解决NULL 或引用现有数据
我一直在试图理解这个话题,但我并没有真正理解它,我真的很怀疑我只是坚持下去,没有它我就无处可去。
我知道拆分表格并保持简短是最佳实践,但它并不真正适用于我的情况,因为我了解到应该拆分不经常调用的数据,但是这些属性经常被调用,在我的情况下,每当每个成员被加载到前台时,他的详细信息也会被拉出。
有关我的数据库的详细信息:
- 我的主表有18列叫
Member
,成员表的每一列,“单独”只依赖主键MemberID
- 有些列有空值,我的理解是在 MySQL 中空值不分配任何空间
这就是我被困的地方
我应该在 Member
表中保留一列具有空值的列,还是将其分离到另一个表中并在一对一关系中使用 MemberID
外键与之关联?
例如:一个人可能有也可能没有电话号码,但电话号码必须属于一个人:
Member (1:1)-----------(0:1) Phone number
MemberId
是电话号码表中的外键和主键。
通常数据库中要求一个人只输入一个当时在起作用的数字,所以这不是一对多的关系
我问这个问题的主要原因是列中的多数值为空,所以我应该将它保留在表中,即使它有多数空值(10k 记录我有 4k 值作为 NULL)
解决方法
这个问题有几个答案,取决于你真正想要做什么。
有时,包含大量 NULL 的表会减慢处理速度。表达一个 NULL 需要一两个字节,处理过程中还有一些额外的步骤。有时,将两个表连接在一起会减慢速度。此处的答案特定于您的情况。
有时真正的悲伤来自 SQL 三值逻辑。这真的很难理解,特别是如果你从小就学会了两种价值逻辑。 3 不等于 NULL。 3 也不等于 NULL。而且NULL不等于NULL。这很容易搞砸。但是,如果你能做到直截了当,你可以在视图或过程或应用程序代码中编写适当的代码。
有时,首先避免 NULLS 是更好的数据管理。我从来没有遇到过这种情况,我真的无法解释。
有时,DBMS 甚至会妨碍您。在 Oracle 中,长度为零的可变长度字符串存储为单个零字节。 NULL 也存储为单个零字节。如果您需要将这两者区分开来,那您就不走运了。
NULLS 几乎总是正确方法的一种情况是可选关系。在这种情况下,正确的做法通常是拥有一个引用另一行的主键的外键,通常在另一个表中,当存在关系时。当关系不存在时,外键为 NULL。
我知道这很清楚,但我希望它有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。