Как я могу моделировать этот класс в базе данных? - PullRequest
1 голос
/ 16 августа 2011

Мне нужно немного помочь.Это мой план организации нескольких категорий.

   Category 1
     Sub Category 1.1
       Sub Category 1.1.1
     Sub Category 1.2
     Sub Category 1.3

Это была бы коллекция.Я хочу сохранить его в базе данных, но я не знаю, как мне смоделировать его в таблице базы данных.Я использую SQL Server CE.

enter image description here

ОБНОВЛЕНИЕ :

Я забыл поставить объективное число в классе (1.1, 1.10,1).

Ответы [ 4 ]

3 голосов
/ 16 августа 2011

Ваша таблица будет примерно такой:

  • категория
    • идентификатор (первичный ключ, не ноль)
    • имя (текст, не ноль)
    • parent_category_id (внешний ключ к category.id, обнуляемый)

Затем, если у категории есть родитель, вы ссылаетесь на id этого другогострока.Таким образом, таблица является самостоятельной.Категории верхнего уровня имеют значение NULL parent_category_id.

При создании таблиц, подобных этой, вам нужно быть осторожным, чтобы не создавать циклическую ссылку.

0 голосов
/ 16 августа 2011

Вот моя рекомендация.Создать три таблицы.Я предполагаю, что каждая таблица имеет разные столбцы

Category { Id, Name,...} 
SubCategory {Id, Name, ..., **ParentID**}  [ParentID is a FK from Category table Id Column] 
SubSubCategory {Id, Name, ...,  **SubParentID**}  [SubParentID is a FK from SubCategory table ParentID Column]
0 голосов
/ 16 августа 2011

Я бы использовал простое Рекурсивное отношение . У каждой категории должен быть уникальный идентификатор (первичный ключ) и необязательное поле, указывающее ее родителя, который будет внешним ключом, возвращающим в ту же таблицу. Категории с NULL родителем являются категориями верхнего уровня.

На странице, на которую я ссылался, также есть информация о том, как можно запросить эту структуру, чтобы найти Категории верхнего или среднего уровня.

0 голосов
/ 16 августа 2011

Для этого у вас может быть таблица, где элемент может ссылаться на своего родителя, если таковой имеется.

enter image description here

Если столбец ParentId равен NULL, категорияявляется корневым.Если нет, на родительский элемент ссылаются.

Затем можно найти подкатегории категории, пройдя по таблице и выполнив поиск элементов с ParentId, равным Id категории.

Обратите внимание, что ParentId должен быть проиндексирован для лучшей производительности, и что для обеспечения достоверности ваших данных должен быть внешний ключ от ParentId до Id.

Рекурсивное хранение категорий:

private void SaveCategoryRecursively(Category category)
{
    foreach (var subCategory in category.SubCategories)
    {
        query(@"
insert into [dbo].[Categories] ([Id], [ParentId], ...)
values (@id, @parentId, ...)", ...);
        this.SaveCategoryRecursively(subCategory);
    }
}

public void SaveCategories(IEnumerable<Category> rootCategories)
{
    foreach (var category in rootCategories)
    {
        query(@"
insert into [dbo].[Categories] ([Id], [ParentId], ...)
values (@id, NULL, ...)", ...);
        this.SaveCategoryRecursively(category);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...