У меня есть база данных с таблицей, в которой хранятся все возможные комбинации субъекта, глаголов и дополнений.
Эта таблица выглядит как распределительная таблица, в которой столбцы Id сопоставляются с другими моими таблицами (таблица субъекта,таблица глаголов, дополняет таблицу).
В моей программе я использую древовидную структуру для представления соединительной таблицы, и поэтому каждый узел является просто объектом со свойством Id (subjectId или verbId ...).
Однако я не могу понять, куда поместить фактические данные, на которые отображается Id.Хотя у меня было два варианта:
- Сделать данные свойством каждого узла
- Сделать данные узлом
В первом случае единственной обработкой, которую я делаю, является загрузка таблицы комбинаций и создание дерева.И когда мне нужны данные, которые идут вместе с ними, я загружаю их по требованию.Но чтобы отслеживать положение данных в дереве, у данных есть свойство, которое указывает обратно на узел, к которому они принадлежат (очевидно, хак, чтобы избежать необходимости искать во всем дереве (даже если это только O (log (n)) операция). Кроме того, я буду иметь дело только с узлом во всей программе, поскольку это удобный способ добраться до потомков этого узла.
Во втором случае, если бы я былчтобы сделать фактические данные узлом , мне нужно было бы загрузить все данные сразу, прежде чем их использовать. Кроме того, мне все еще нужно создать копию данных, если «родные братья и сестры узла» используютте же данные.
Есть ли чистый способ добиться того, что я пытаюсь сделать? Ниже перечислены то, что у меня есть
public class Node<Word>{
public Word Data { get; set; }
public Guid ID { get; set; }
..... // other necessary tree like stuff
}
public class Word
{
public Node NodeItem { get; set; }
}
или
public class Word : Node{}
IНадеюсь, что вопрос достаточно ясен. Дайте мне знать, если вам нужно больше деталей, и я обновлю вопрос с ним. Спасибо.