Проблема взаимоотношений в ERD

Я создал простую ERD для культурного сайта. Правильны ли эти отношения?

cul_categories ( ||-----|<- ) cul_pages//Travel has at least one page

cul_categories ( ||-----O-<- ) sub_categories //e.g Arts---->Music, painting etc. ,or there can be, for example, a Travel which has no sub-category.

sub_categories ( ||-----|<- ) cul_pages//if we have Music then at least one page for it.

enter image description here

2
nl ja de
У меня также нет инструмента для рисования. Ваши отношения последовательны. Только вы можете сказать нам, правильно ли они отображают данные, которые вы хотите сохранить (правильные). Возможно, вы захотите рассмотреть вопрос о наличии cul_categories со значением, которое определяет, имеет ли категория родительский элемент (является подкатегорией).
добавлено автор Gilbert Le Blanc, источник
Теперь у вас 10;)
добавлено автор Dimitar Tsonev, источник
Спасибо DT. Ты замечательный :)
добавлено автор sajid khan, источник
я имею в виду, если страница принадлежит только cul_categories, то составной внешний ключ в cul_pages, например, в строке будет иметь значение для cul_category_id, но null для sub_category_id. Это нормально?
добавлено автор sajid khan, источник

1 ответы

Трудно быть уверенным, если это правильно, но есть проблема. Вы не можете применять правила о том, что «страницы» находятся в категории ИЛИ подкатегории, потому что вы не можете сделать столбцы внешнего ключа не-null.

Чтобы этого избежать, вы можете изменить модель следующим образом:

TABLE: Category
-------------------
CategoryID (PK)
ParentCategoryID (FK)
Name

TABLE: Page
--------------
PageID (PK)
CategoryID (FK)
...

Это позволяет вам создать отношение NOT NULL к внешнему ключу от страницы к категории; категории с NULL ParentCategoryID являются категориями «верхнего уровня», а категории с parentCategoryID являются подкатегориями.

Пример данных:

Category

CategoryID    ParentCategory    Name
-----------------------------------------
1             null              Arts
2             1                 Painting
3             1                 Music
4             null              Travel


Page

PageID    CategoryID        Name
-------------------------------------
1         2                 Page about painting
2         3                 Page about music
3         3                 Another page about music
4         4                 Page about travel
2
добавлено
Тогда ваша таблица страниц имеет значение CategoryID, относящееся к категории верхнего уровня. Я добавил некоторые примеры данных для объяснения.
добавлено автор Neville Kuyt, источник
но что, если категория верхнего уровня не имеет подкатегории, а страницы?
добавлено автор sajid khan, источник
Намного лучше. Спасибо Neville
добавлено автор sajid khan, источник
dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

Разработка СУБД
Разработка СУБД
143 участник(ов)