Поправьте меня, если я ошибаюсь, но то, что вы пытаетесь сделать, это по существу иметь два столбца, в которых один содержит набор данных, а другой содержит результат простой математической операции из первого столбца. Из этого у вас есть два столбца, где один зависит от другого, что означает, что вы занимаете вдвое больше необходимого пространства памяти. Для 100 записей это нормально. За 1 000 000? Меньше так.
Лично я считаю, что вам лучше , а не с cosColumn
, и вам следует вычислять косинус, когда вы читаете данные. Например:
// In your C# code...
public class MyData
{
public double Column1 { get; set; } = 0.0;
public double Cosine => Math.Cos(Column1);
}
В приведенном выше примере значение косинуса никогда не сохраняется и не создается ни в C #, ни в SQLite, но оно получается только при необходимости . Это делает его более удобным для памяти в таблице SQLite и обеспечивает лучшую структуру SQLite.
В приведенном выше коде строка:
public double Cosine => Math.Cos(Column1);
в точности соответствует:
public double Cosine
{
get
{
return Math.Cos(Column1);
}
}
Нет никакой разницы между ними, и вы экономите много места в строке. Вы можете найти больше информации о =>
нотации от этого ответа StackOverflow Алекса Букера.
Давайте рассмотрим пример реализации этой структуры. Предположим, у вас есть база данных с 1 столбцом с именем Column1 , и вы хотите применить функцию Cosine к этому значению и отобразить ее. Ваш код может выглядеть так:
// Read from database object of type MyData
MyData data = ReadOneValueFromDatabase<MyData>();
// Display values in a label
MyValueLabel.Text = "Database value: " + data.Column1.ToString();
MyCosineLabel.Text = "Cosine value: " + data.Cosine.ToString();
Объект data
будет хранить значение Column1
из базы данных в Column1
, но не Cosine
. Значение Cosine
получается только тогда, когда вы звоните data.Cosine
.