我有一个C#应用程序需要一组数组,
double[10] x = {0, 1.5, ......}
double[10] y = {0, 2.4, ......}
我需要将这些数据存储在Sql-Server上,直到现在我创建了一个包含x1,x2,... x10和y1,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上保存数据的方式吗?
感谢您的阅读和帮助。
答案 0 :(得分:3)
您应该问问自己,如果您描述了您尝试使用数据库解决的问题,那么您在此数据库中放置的项目通常是10个双打,还是数字10"只是管理层决定",如果他们心情不同,他们可以选择9或11吗?
此外:你的10个双打真的只有10个双打,或者x [0]的含义是否与x [1]不同。如果你的名字/地址中有几个字符串,你会称它们为AddressLine1,AddressLine2,City,PostCode,还是称它们为AddressData [4]?想想你的双打是否具有特殊意义,或者它们是否可以互换。
可能,在几年内,当你有数以万计的记录时,他们突然决定要保存11个双打而不是10个双打?或者更糟糕的是:有些记录有10个值,有些记录有11个值,有些记录甚至可能有不同数量的值。
如果您真的认为,数字10不仅仅是一个决定,而是您正在解决的问题的内在因素,与象棋桌上的方格数一样坚固,那么您应该将所有10个双打作为单独的值添加到你的表,因为这对数据库操作来说是最快的
如果另一方面,你可能会认为将来人们可能想要不同数量的双打,我会说要去寻找一对多的关系。
这将提高您的代码的可读性:"具有此成绩的学生"更容易阅读和#34;学生的算术成绩和生物学成绩,以及他的成绩...",即使你绝对确定你的学校只有10门课程。
如果将值放在一对多关系中,以降低某些数据库访问速度的成本,您将获得提高可重用性/可维护性的好处(将来某些项可能有11个值,或零值),降低学习曲线,因为将它作为一对多实现更为常见。
答案 1 :(得分:1)
您应该保持数据行的基础,而不是基于列。例如
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)
)
这意味着您将在MyTableXSets中有一个条目,MyTableX中包含链接的行。如果你需要知道它在哪个索引中,你也可以在MyTableX上添加一个Index INT。