mysql - 数据库设计:使用布尔字段和重复表之间的区别
问题描述
我必须为正在构建的应用程序设计数据库模式。我将使用 MySQL。在这个应用程序中,用户输入数据并且它显然被保存在数据库中。但是,在用户发布数据之前,公众无法访问此数据。目前,我有一列用于存储所有数据。我想知道此表中指示数据是否已发布的布尔字段是否是一个好主意。或者,创建一个保存数据的表和一个发布数据的表,并在用户按下时将保存的数据移动到发布的数据表,是不是更好的设计Publish
。
使用每一种的优点和缺点是什么,其中一种被认为比另一种更好?
解决方案
案例:二进制
他们差不多。将此用作学习练习——以一种方式实施;观察一段时间,然后切换到另一种方式。
- (相同)空格:由于一行只存在一次,因此两个选项都不是“更好”。
- (偏爱 1 个表)当“发布”时,它需要一个事务从一个表中原子地删除并插入到另一个表中。
- (喜欢 2 个表)某些
SELECTs
人会花时间过滤掉其他值为 的记录published
。(这适用于deleted
、embargoed
、approved
和许多其他可能的布尔标志。)
案例:修订历史
如果一条记录有很多修订,那么两个表Current
data 和History
会更好。这是因为“重要”查询涉及获取唯一的当前数据。
(PARTITIONs
在这两种情况下都不太可能有帮助。)
推荐阅读
- c# - c# - 如何将MDI窗体中的第二个(子)窗体的控制框层删除为C#中的父窗体?
- email - colab处理完成时如何发送电子邮件通知
- javascript - 未捕获的 ReferenceError:未定义 messageRef
- c# - System.IO.FileLoadException:
- google-cloud-platform - Gremlin 客户端通过基于 URL 的负载均衡器连接到 Gremlin / JanusGraph 服务器
- python - Python烧瓶:多次返回值
- javascript - 如何使它在javascript中刷新时数据不会丢失?
- c++ - 返回空值的字符串值
- python - 通过在 Mac OS 上双击桌面图标运行 Python 脚本
- c# - ASP.NET MVC Core - 将表单发布到类参数