我有一个员工表和状态表。在员工表中,我有他的身份和姓名。并且在状态i中存储他一年中不同月份的状态。
它永远不会结束,即从今年开始到更多年,它将继续增长,即每一行代表一个月和一年的状态。因此,这需要花费大量时间在屏幕上加载12个月的数据作为其1对多关系。
所以我想将这些数据以序列化方式存储在与employee表相同的表中,即key将是month_year,value将是其状态。所以,如果我这样做,这个表会变大,造成空间问题吗?
如果我存储序列化数据并存储在其中,我应该使用什么数据类型。因为这个应用也可以使用3 - 4年。所以它在数组中有48个月的数据,与表格中的序列化相同。
****更新*****
如果这个月是11月,我将在今年10月到明年10月的屏幕数据上显示。所以这是最大的问题。
**** Update2 ***
这就是我应该如何在屏幕上显示我的数据,即每个员工12个月的状态。所以我在我的PHP代码中输入嵌套查询的问题。让一个员工循环进入第二个表并获取他的所有数据并显示。
答案 0 :(得分:2)
序列化是一个糟糕的选择 您可以像这样考虑规范化: -
employee ( id, name ...);
employee_status (employee_id, year_month int(6), status boolean);
获取10月至10月的就业状况清单: -
select e.id, e.name, es.year_month, es.status
from employee as e
inner join employee_status as es
on e.id=es.employee_id
where es.year_month between "201110" and "201210";
答案 1 :(得分:1)
在状态表中,您可以创建15列:
当您存储状态时,只需将月份列从NULL更改为您的状态(可以直接存储在此表中,也可以将FK更改为另一个表)。
要显示一年的结果,只需:
SELECT * FROM status WHERE year = 2011 AND user_id = 1;
您返回一行,每个月都有一个状态。然后,您可以过滤IS NULL以仅获取您具有状态的那些月份。
您的表格仅为每位状态为一年的员工存储一行。