My college days were more than 3 decades ago, so pardon me if I'm a little rusty or skip some steps. First, list all the attributes and identify what it describes:
Attribute Entity
========= ======
portfolio id Portfolio
insurance company name Insurance Co.
insurance company phone Insurance Co.
agent name Agent
agent license number Agent
state of residence Agent
policy number Policy
policy description Policy
annual premium Policy
benefit Benefit
beneficiary details Benefit
number of policies Agent
number of policies Portfolio
So now we have the new entities Insurance Co, Agent, Policy and Benefit. Now the question is, "Could there be multiple occurrences of any of these attributes?" Yes, there could be many benefits (thus many details) for one policy. And each portfolio can be made up of many policies. So we break out benefits and policies and remove their attributes from Portfolio:
Benefit(ID, Benefit, Beneficiary Details)
Policy (ID, Policy Number, Description, Annual Premium)
Portfolio (...)
There are no more multiple or non-atomic attributes so Portfolio is now in 1nf. Now we pull out the attributes which describe an entity other than Portfolio. The design now looks like this:
Benefit (ID, Benefit, Beneficiary Details)
Policy (ID, Policy Number, Description, Annual Premium)
Insurance Co (ID, Name, Phone)
Agent (ID, Name, License No, State of Residence, Number of policies)
Portfolio (ID, InsuranceCoID, AgentID, Number of policies)
Portfolio is now in 2nf. But there are relationships between the other entities. I'm making assumptions here, one of which is that an agent works for one company rather than like a broker-agent who represents multiple companies. So the Agent would have a 1-n relationship with the Insurance companies (an agent relates to at most one company, a company relates to zero, one or many agents). The same relationship seems to exist between policy and agent, between benefit and policy (assuming each benefit is tailored exclusively for each policy) and between policy and portfolio. Adding these relationships looks like this:
Benefit (ID, PolicyID, Benefit, Beneficiary Details)
Policy (ID, Policy Number, AgentID, PortfolioID, Description, Annual Premium)
Insurance Co (ID, Name, Phone)
Agent (ID, CompanyID, Name, License No, State of Residence, Number of policies)
Portfolio (ID, Number of policies)
Different assumptions will yield different results, but the process is the same.
Now Portfolio is in 3nf. I would be thinking that the coupling between Policy and Portfolio is loose enough to define a 1-n intersection table rather than have the Portfolio FK as part of the Policy tuple, but that is not formally a part of the normalization process. There is also the issue of relating policy directly to company instead of (or as well as) through agent. This would allow an agent to move from one company to another without dragging all the policies with him. But it brings up the question of how to handle the situation where a policy relates to a different company than the agent. These are valid design considerations (and I haven't even addressed the two calculated fields 'Number of Policies') but as far as normalization is concerned, we seem to be done. I make no claim that it is the best that could be done, it's just an example.