package main

import (
	"fmt"
	"strings"
)

// BarisMahasiswa meniru satu baris tabel mahasiswa yang belum normal:
// kolom telepon menyimpan banyak nilai dalam satu sel.
type BarisMahasiswa struct {
	NIM     string
	Nama    string
	Telepon string
}

// BarisTelepon adalah hasil 1NF: satu nilai telepon per baris.
type BarisTelepon struct {
	NIM     string
	Telepon string
}

// normalisasi1NF memecah kolom multi-nilai menjadi baris terpisah.
func normalisasi1NF(barisan []BarisMahasiswa) []BarisTelepon {
	hasil := []BarisTelepon{}
	for _, b := range barisan {
		for _, t := range strings.Split(b.Telepon, ",") {
			hasil = append(hasil, BarisTelepon{NIM: b.NIM, Telepon: strings.TrimSpace(t)})
		}
	}
	return hasil
}

func main() {
	sebelum := []BarisMahasiswa{
		{NIM: "M001", Nama: "Budi", Telepon: "0812-111-2222, 0813-333-4444"},
		{NIM: "M002", Nama: "Siti", Telepon: "0815-555-6666"},
	}

	fmt.Println("sebelum (melanggar 1NF):")
	for _, b := range sebelum {
		fmt.Printf("  %s %s telepon=%q\n", b.NIM, b.Nama, b.Telepon)
	}

	sesudah := normalisasi1NF(sebelum)
	fmt.Println("sesudah (memenuhi 1NF):")
	for _, b := range sesudah {
		fmt.Printf("  %s telepon=%q\n", b.NIM, b.Telepon)
	}
}
