Exactly how far do you normalize the example below, and exactly which level of normalization does this example meet?
CREATE TABLE "public"."contact_info" (
"id" SERIAL,
"home_phone" TEXT,
"mobile_phone" TEXT,
"work_phone" TEXT,
"fax_phone" TEXT,
"email" TEXT,
"line1" TEXT,
"line2" TEXT,
"city" TEXT,
"state_id" INTEGER,
"zipcode" TEXT,
"preferred_type" TEXT,
"first_name" TEXT,
"last_name" TEXT,
CONSTRAINT "contact_info_pkey" PRIMARY KEY("id"),
CONSTRAINT "contact_info_fk_state_id" FOREIGN KEY ("state_id")
REFERENCES "public"."states"("id")
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
) WITH OIDS;
It should be noted that each record can have only 0 or 1 home, mobile, work, or fax number records. Each phone number is fully functionally dependent upon my primary key. From what I know about database normalization, I think this meets 5NF, but fails 6NF.
Since the phone number definitions are set in stone (no new phone number types, no multiple home_phone entries, etc.), is there any reason I would want to split the phone numbers into a separate relation tracked by (contact_info_id, phone_number, type)?