我应该序列化一个关联数组还是动态生成表来记录这些数据?
Should I serialize an assoc array or dynamically generate tables to story this data?
我创建了一个 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
)
)
现在 [Pay] 和 [Deductions] 可能每个月都会发生变化(例如,有时可能会有费用/生活费/停车费等)。该脚本只是创建关联数组,但在这些常见的之上还有大约 20 个变量添加/扣除。没有在 MySQL table 中创建另外 20 个列,到目前为止,我已经使用 JSON 序列化这两个字段并像那样存储它们,但是很难/动态地搜索它们修改等
我只是想知道是否有一个明显的解决方案我错过了动态列(其中一些我可能还没有预测到)。
我进一步想知道是否为每个月的每个工资/扣除动态创建一个 table,然后在搜索时进行 JOIN,但这似乎过分了。
感谢任何帮助!
您可以在 payslip
数据库 table 旁边创建一个名为 specification
的第二个 table 或类似的东西。 table 中的列将是 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 在他的评论中提到的,这是“数据库规范化”的一部分。
我创建了一个 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
)
)
现在 [Pay] 和 [Deductions] 可能每个月都会发生变化(例如,有时可能会有费用/生活费/停车费等)。该脚本只是创建关联数组,但在这些常见的之上还有大约 20 个变量添加/扣除。没有在 MySQL table 中创建另外 20 个列,到目前为止,我已经使用 JSON 序列化这两个字段并像那样存储它们,但是很难/动态地搜索它们修改等
我只是想知道是否有一个明显的解决方案我错过了动态列(其中一些我可能还没有预测到)。 我进一步想知道是否为每个月的每个工资/扣除动态创建一个 table,然后在搜索时进行 JOIN,但这似乎过分了。
感谢任何帮助!
您可以在 payslip
数据库 table 旁边创建一个名为 specification
的第二个 table 或类似的东西。 table 中的列将是 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 在他的评论中提到的,这是“数据库规范化”的一部分。