Я собираю структуру базы данных, которая может содержать данные для курсов. Каждый курс будет состоять из нескольких глав, и каждая глава МОЖЕТ содержать темы, а каждая тема МОЖЕТ иметь подтемы и т. Д.
Это пример данных
Course - Accounts
1) Introduction to Accounts
a) Basic Accounts
2) Financial Statements
a) Income statement
i) Depreciation
b) Cash Flow Statement
3) Career as an accountant
Теперь с каждой из этих тем будут связаны примечания к лекциям. Теперь я думаю, что это глава 1 - «Введение» - заметки будут связаны с темой «Основные счета». Но в главе 2 - «Отчет о прибылях и убытках» не будет никаких примечаний, но «Амортизация» будет иметь примечания. Теперь, поскольку глава 3 «Карьера в качестве бухгалтера» не имеет подтем - примечания будут связаны непосредственно с ней.
Это только мой способ или организация - я могу применять правила, согласно которым каждая глава должна иметь подтему, чтобы заметки могли быть связаны и т. Д.
Это то, что я имею до сих пор
Table: Course
course_id
course_name
Table: Topics
topic_id
parent_topic_id
topic_name
notes
Table: Course_Topics
course_id
topic_id
Таким образом, пример данных будет выглядеть как
Course_id | Course Name
1 Accounts
Topic_id | Parent_topic_id | topic_name | notes
1 0 Introduction
2 1 Basic Accounts
3 0 Financial Statements
4 3 Income Statements
5 4 Depreciation
Course_id | Topic_id
1 1
1 2
1 3
1 4
1 5
Вот что я ищу:
1) Есть ли лучший способ разработать это - должен ли я применять более строгие правила о том, как примечания связаны с главами или темами или подтемами
2) Во-вторых, с учетом этой структуры данных, если я хочу получить все темы для данного курса и отобразить их в формате главы -> тема -> древовидная структура подтемы. Как бы я это сделал. Должен ли я просто извлечь все темы на основе идентификатора курса, а затем на стороне сервера сохранить их в структурах данных и упорядочить их в соответствии с главой / темой / подтемой или есть более чистый способ сделать это с помощью подзапросов.
Извините за длинный пост - просто хотел четко объяснить.
Спасибо за ваше время
****** РЕДАКТИРОВАТЬ ********
Спасибо за все ответы, парень. Я столкнулся с другим подходом - добавить столбец линии и глубокий столбец в таблицу.
Подход объясняется здесь как "Модель плоского стола сделана правильно"
http://www.ferdychristant.com/blog/archive/DOMM-7QJPM7
Что вы, ребята, думаете об этом подходе?
Secondly - John raised a good point in his answer. How would I handle inserts in between.
- Chapters (parent_id =0) Say if I want to insert a new chapter between chapter 1 and 2
- Topic (parent_id != 0 ) If I want to insert a new topic between any two existing topics
Должен ли я иметь другой столбец, поддерживающий порядок, например, 1,2,3, а затем, если я хочу вставить что-то между главами 1 и 2 - вставить это значение со значением 1,1 или что-то подобное - можно ли использовать тот же столбец по темам.
Еще раз спасибо