具有未知列数的Flattern子/父数据

时间:2016-04-01 07:30:38

标签: c# mysql sql

我很难找到存储和表示我在SQL(MySQL DB)和C#窗体中的数据的最佳方法。

我的数据映射到看起来像这样的类时;

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; }
}

我的数据非常动态。因此,父记录可以包含任意数量的子记录。

在子记录中,MemberCode和ElementCode实际上是其他表/类的外键,在执行查找时,我会详细说明数据的实际内容。例如

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

这些有效地组合以指示列名称是什么,并且它们总是相同的(因此,无论与哪个子对象相关联,MemberCode = 1&amp; ElementCode = 1将始终为Date)。 目前这些是引用/查找,但我也可以将数据放在类中的变量中,因为这可能会使它更容易。然后它更像是一个键值对。

目前在我的数据库中我将​​这些存储为两个表,子记录还包含来自父级的UniqueID。但是我不确定这是我解释的最佳方式。

我的表是这样创建的

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`)
)

现在我要做的是将这些数据展平,以便我可以显示包含所有子记录的单个父记录作为单行。理想情况下,我希望在ObjectListView(http://objectlistview.sourceforge.net/cs/index.html)中显示它,但如果它让生活更轻松,可以考虑数据网格。

因为我的数据是动态的,所以我很难将其弄平,如果我选择10条父记录,那么每条记录都可以有不同数量的子元素,每个元素都可以有不同的MemberCode和ElementCode,这意味着它们实际上是不同的列。

所以我的数据可能如下所示(但规模较大);

My Data

但由于数据的动态性,我努力做到这一点。在SQL或代码中的对象中。也许还有另一种方法可以存储我的数据,以便更好地适应它。

0 个答案:

没有答案