Datos secundarios / primarios planos con un número desconocido de columnas

Estoy luchando por encontrar la mejor manera de almacenar y representar los datos que tengo en SQL (MySQL DB) y C # Windows.

Mis datos se asignan a clases que se ve así;

public class Parent
{
        public string UniqueID { get; set; }   //Key
        public DateTime LoadTime { get; set; }
        public string Reference { get; set; }
        private List<Child> Elements { get; set; }
}

public class Child
{
        public int MemberCode { get; set; }   //Composite key
        public int ElementCode { get; set; }  //Composite key
        public Object Data { get; set; }
}

Mis datos son muy dinámicos. Por lo tanto, un registro primario puede tener cualquier cantidad de registros secundarios.

En el registro secundario, MemberCode y ElementCode son en realidad claves foráneas para otras tablas / clases, que cuando se realiza una búsqueda me da detalles de lo que realmente son los datos. Por ejemplo

MemberCode = 1 & ElementCode = 1 means data is a Date
MemberCode = 1 & ElementCode = 3 means data is a telephone number
MemberCode = 2 & ElementCode = 11 means data is a Product Code
MemberCode = 2 & ElementCode = 12 means data is a Service Code
etc

Estos se combinan efectivamente para indicar cuál es el nombre de la columna, y estos son siempre los mismos (por lo que MemberCode = 1 & ElementCode = 1 siempre será una Fecha, sin importar con qué objeto secundario esté asociado). Por el momento, estas son referencias / búsquedas, pero también podría poner los datos en una variable en la clase, ya que eso podría facilitarlo. Entonces sería más como un par de valor clave.

En este momento en mi base de datos los tengo almacenados como dos tablas, con el registro secundario que también contiene el UniqueID del padre. Pero no estoy seguro de que esta sea la mejor manera, como explicaré.

Mis tablas se crean como tal

CREATE TABLE `PARENT` (
        `ID` INT(11) NOT NULL AUTO_INCREMENT,
        `LOADTIME` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `REFERENCE` VARCHAR(100) NOT NULL,
        PRIMARY KEY (`ID`)
    )

CREATE TABLE `CHILD` (
    `ID` INT(11) NOT NULL,
    `MEMBER_CODE` INT(11) NOT NULL,
    `ELEMENT_CODE` INT(11) NOT NULL,
    `DATA` VARCHAR(4000) NULL DEFAULT NULL,
    PRIMARY KEY (`ID`, `MEMBER_CODE`, `ELEMENT_CODE`),
    CONSTRAINT `fk_ID` FOREIGN KEY (`ID`) REFERENCES `Parent` (`ID`)
)

Ahora, lo que quiero hacer es aplanar estos datos para que pueda mostrar un solo registro principal con todos los registros secundarios como una sola fila. Idealmente quiero mostrarlo en un ObjectListView (http://objectlistview.sourceforge.net/cs/index.html) pero puede considerar la cuadrícula de datos si facilita la vida.

Debido a que mis datos son dinámicos, estoy luchando por aplanar esto y si selecciono 10 registros principales, cada uno puede tener un número diferente de elementos secundarios, y cada uno puede tener diferentes MemberCodes y ElementCode, lo que significa que son efectivamente columnas diferentes.

Entonces mis datos podrían verse de la siguiente manera (pero a mayor escala);

Pero debido a la naturaleza dinámica de los datos, me cuesta hacer esto. Ya sea en SQL o en Objetos en mi código. Tal vez hay incluso otra forma de almacenar mis datos que le conviene mejor.

Respuestas a la pregunta(1)

Su respuesta a la pregunta