我很难找到存储和表示我在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,这意味着它们实际上是不同的列。
所以我的数据可能如下所示(但规模较大);
但由于数据的动态性,我努力做到这一点。在SQL或代码中的对象中。也许还有另一种方法可以存储我的数据,以便更好地适应它。