我应该序列化一个关联数组还是动态生成表来记录这些数据?

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 中的列将是 idpayslipIdtitleamount。你的 [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 在他的评论中提到的,这是“数据库规范化”的一部分。