mysql – 一个表中的许多空值与三个表中的空值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 一个表中的许多空值与三个表中的空值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1912字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 一个表中的许多空值与三个表中的空值](/upload/InfoBanner/zyjiaocheng/900/05d9526dca6f485588acd06061818006.jpg)
我有三个包含公共字段的表 – 用户,访客和管理员.
最后两个表有一些用户字段.
这是一个例子:
用户
id|username|password|email|city|country|phone|birthday|status
宾客
id|city|country|phone|birthday
管理员
id|username|password|status
我想知道它是否更好:
a)使用一个具有许多NULL值的表
b)使用三个表
解决方法:
关于数据结构的问题是关于“一个表有很多NULL而不是三个表”的问题.真正的问题是数据结构中的其他表将如何引用这些实体.
这是一种经典情况,您有“一个”关系,需要在SQL中表示它们.有一种“正确”的方式,那就是有四个表:
>“用户”(我想不出一个好名字)会包含每个人并拥有一个可以被其他表引用的唯一ID
>“普通”,“管理员”,“来宾”,每个人都与“用户”有1-0 / 1的关系
这允许其他表引用三种类型的用户中的任何一种,或者一般地引用给用户.这对于维持正确的关系非常重要.
您已经建议了两个快捷方式.一个是没有关于“普通”用户的信息,所以你省去了那个表.但是,这意味着您无法在另一个表中引用“普通”用户.
通常,当数据结构相似时,数据被简单地非规范化为单行(如在解决方案中).
在具有特定需求的应用程序的上下文中,所有这三种方法都是合理的.至于性能,当数据类型是可变长度时,具有附加NULLABLE列的差异通常是最小的.如果许多附加列是数字的,那么即使在NULL时这些也占用了真实空间,这可能是设计最佳解决方案的一个因素.
简而言之,我不会在基于过早优化的不同选项之间进行选择.我会根据数据库所需的整体数据结构在它们之间进行选择,特别是这些实体与其他实体的关系.
编辑:
然后是您用于专用表的id的问题.有两种方法可以做到这一点.一种是为每个表都有一个单独的id,例如AdminId和GuestId.每个表中的另一列是UserId.
当其他实体与这些特定实体有关系时,这是有意义的.例如,“admins”可能有一个子系统,用于描述他们拥有的权限,角色和权限,可能还有变更历史记录.这些表(ahem,实体)想要引用AdminId.并且,你应该让他们放弃.
如果您没有这样的表,那么您可能仍然会拆分管理员,因为他们需要的100个整数列对于其他众多用户来说是浪费空间.在这种情况下,您可以在没有单独ID的情况下使用.
我想强调的是,你提出了一个一般没有“最佳”答案的问题.它通过规范化规则(具有4个单独的id的4个表)确实具有“正确”的答案.但在给定情况下,最佳答案取决于整体数据模型.
内容总结
以上是互联网集市为您收集整理的mysql – 一个表中的许多空值与三个表中的空值全部内容,希望文章能够帮你解决mysql – 一个表中的许多空值与三个表中的空值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。