在数据库中存储数组的最佳方法



我有一个C#应用程序,该应用程序需要一组阵列,以至于

double[10] x = {0, 1.5, ......}
double[10] y = {0, 2.4, ......}

我需要将这些数据存储在sql-server上,直到现在,我创建了一个具有X1,x2,... x10和y1,y2,y2,... y10的列的表。因此,对于我的第一组,我有一个表行,

no  x1 x2...x10   y1 y2...y10
1   0  1.5 ....   0  2.4 ....

因此,当我需要数据库上的数据时,我会使用类似的代码(带有实体框架(,

x[0] = data.x1;
x[1] = data.x2;
.
.
x[9] = data.x10;
y[0] = data.y1;
y[1] = data.y2;
.
.
y[9] = data.y10;

但是,这种方式对我来说并不正确。是否有更简单的方法来执行此操作(例如x = data.x(。我应该改变将数据保存在SQL上的方式吗?

感谢您的阅读和您的帮助。

您应该问自己,如果您描述了尝试使用数据库解决的问题,是您在此数据库中放入的项目是否通常有10倍的倍数,还是数字是数字10"只是管理决定",如果心情不同,他们可以选择9或11个吗?

此外:您的10次双打实际上只是10双,还是x [0]的含义与x [1]不同。如果您的姓名/地址中有几个字符串,您是否会将其称为addressline1,adversionLine2,City,Post Code,还是将其称为addressData [4]?考虑一下您的双打是否具有特殊含义,或者它们是否可以互换。

可以是,几年来,当您拥有千亿次记录时,他们突然决定要节省11个双打而不是10次双打?也许更糟糕的是:有些记录有10个值,有些有11个值,有些值甚至可能具有可变的值。

如果您真的认为,数字10不仅是一个决定,而且是您要解决的问题的固有的,与国际象棋棋盘上的正方形数量一样坚实,那么您应该将所有10个双打添加为单独的值在您的桌子上,这将是数据库操作最快的

另一方面,您可能会认为将来的人可能想要不同数量的双打,我会说一对一的关系。

这将提高您的代码的可读性:一个"成绩的学生"更容易被读成"他的算术成绩和他的生物学成绩,以及他的成绩...",即使您绝对是确保您的学校只有10门课程。

如果将值放在一对多的关系中,则减慢某些数据库访问的成本,您将获得改善可重复使用/可维护性的好处(以后有些项目可能具有11个值,或零值(,较低的学习曲线,因为将其实现为一对多的曲线更为常见。

您应保持数据行基于数据行,而不是基于列。例如

CREATE TABLE MyTableX
(
    GUID UNIQUEIDENTIFIER PRIMARY KEY NOT NULL,
    Value INT NOT NULL,
    SetGUID UNIQUEIDENTIFIER REFERENCES MyTableXSets(GUID)
)
CREATE TABLE MyTableXSets
(
    GUID UINQUEIDENTIFIER PRIMARY KEY NOT NULL,
    SetName VARCHAR(MAX)
)

这意味着您将在mytablexset中有一个条目,并在mytablex中带有链接行。如果您需要知道哪个索引,也可以在mytablex上添加索引int。

相关内容

最新更新