php - 我应该序列化一个 assoc 数组还是动态生成表格来记录这些数据?
问题描述
我创建了一个 php 脚本来自动解析我的工资单 PDF,并希望将它们存储在数据库中以便于参考(为了熟悉,最好使用 MySQL)。
我最终得到的数据(每个工资单)是(例如):(加上大约 40 个其他列,其中大多数不会定期更改)。
Array
(
[assignment] => 123456
[name] => JOE BLOGS
[location] => 42 WEST STREET
[department] => Lancashire
[job_title] => Imaginary
[payscale_description] => Generic desciprtion
[salary] => 12345.00
[hours] => 40
[pt_salary] => 12345.00
[pay] => Array
(
[Basic Pay] => 1234.00
[Additional Hours (OOH)] => 567.00
[Night Allowance] => 891.10
[Weekend Allowance] => 112.13
)
[deductions] => Array
(
[PAYE] => 123.00
[National Insurance] => 456.00
[Pension] => 789.00
[Student Loan] => 101.12
)
)
现在 [工资] 和 [扣除] 可能会每月更改(例如,有时可能会有费用/生活费/停车费等)。该脚本只创建了 assoc 数组,但在这些常见的数组之上还有大约 20 个变量加法/减法。没有在 MySQL 表中创建另外 20 个列,到目前为止,我已经使用 JSON 序列化这两个字段并像这样存储它们,但是很难搜索它们/动态修改等。
我只是想知道是否有我错过的动态列的明显解决方案(其中一些我可能还没有预测到)。我进一步想知道为每个月的每个支付/扣除动态创建一个表,然后在搜索时进行 JOIN,但这似乎过分了。
任何帮助感激不尽!
解决方案
您可以在payslip
数据库表旁边创建第二个名为 的表specification
,或类似的东西。该表中的列将是id
、payslipId
、title
和amount
。您的 [pay] 和 [deductions] 将适合这样:
id payslipId title amount
1 1 Basic Pay 1234.00
2 1 Additional Hours (OOH) 567.00
3 1 Night Allowance 891.10
4 1 Weekend Allowance 112.13
5 1 PAYE -123.00
6 1 National Insurance -456.00
7 1 Pension -789.00
8 1 Student Loan -101.12
您可以根据需要添加任意数量的 [pay] 和 [deductions] 行。
请注意,该payslipId
列将每个规范链接到正确的工资单。
正如 Magnus Eriksson 在他的评论中提到的,这是“数据库规范化”的一部分。
推荐阅读
- bash - Bash - 如何检查所有数组值是否大于特定数字
- html - 在移动 L - 检查员上 - 由于 DIV,我在右侧有一个空白区域
- list - Flutter Firebase 上传自定义类列表
- sql - 如何将 SQL 查询中的行转换为列
- c++ - 我使用静态库在 C++ Visual Studio 2019 中构建了一个 OpenCV 项目,但在运行时仍需要 dll 文件
- azure - 第一方应用程序可以调用 Graph API 以外的 API 吗?
- python - Scrapy 中的 XML 导出器 serialize_field
- c# - 将带有字符串参数的动作传递给没有它的方法
- c++ - 有没有办法从整数中获取模板类型?
- java - 如何用缺失的整数替换 ArrayList 中的重复整数