php - 在 MySQL 中构造和存储部分数据的最佳方法是什么?
问题描述
我对如何提出数据库的结构有一些疑问,困境是我必须存储序列化数据还是最好用关系字段制作一个表。
一个例子是假设该应用程序:
- 客户需要支付费用
- 这些费用是根据第一次付款的日期和付款截止日期产生的
- 想象一个 600 欧元的在线课程,您将其定义为第一次付款的日期 2022-01-01 和付款截止日期 2022-03-01,我们将有 3 期 200 欧元
我目前正在提出一个结构,其中我们有:
- 一张“客户”表
- 一张表“课程”
- 一个表“course_has_inscriptions”
好吧,在“course_has_inscriptions”表中,我们有以下字段:
- ID
- course_id
- client_id
- 发行日期
- 截止日期
- 下一个付款
- 引用 [我想在此处保存一系列序列化配额]
数组如下所示:
$quotas = [];
$quotas ['2022-01'] ['value'] = 200
$quotas ['2022-02'] ['value'] = 200
$quotas ['2022-03'] ['value'] = 200
如果我不是这样做,而是在我存储的另一个“引号”类型的关系表中执行它,是否有任何优势:
- ID
- inscription_id
- 引用
- 价值
谢谢
解决方案
始终选择更简单的选项,即另一张桌子。这更容易,因为数据更容易访问。如果您序列化数据,则必须先检索它并取消序列化才能使用它,如果您使用另一个表,您可以简单地检索和使用它。您实际上可以使用 MySQL 查询的强大功能。
想想看。例如,稍后您将制作一个包含付款的表格,并且您想检查人们是否支付了他们需要支付的费用。如果你序列化你不能用 MySQL 做的数据,你就不得不用 PHP 来做,这不是你想要的。
遇到这个问题很多次的人,总结了几条规则。他们称之为数据规范化。
推荐阅读
- android - 使用 socket.io 制作后台服务以显示通知
- vue.js - 如何在 Vuejs 上进行图表专家更新
- python-3.x - 删除列表中重复项的简单方法
- javascript - 如何正确解析一组 Fetch 响应
- docker - 您的连接不是私人的(此证书无法通过受信任的验证机构进行验证)
- c# - 为什么 C# 配置系统在 IIS 作为 CGI 运行时无法初始化?
- sql - 设置默认值列后插入失败
- react-native - 使用本机反应控制 iOS 上的音乐播放?
- javascript - 使用复选框在选项卡之间切换
- swift - 我下载了一个使用 CocoaPods 的开源项目。我必须安装 CocoaPods 吗?