2002-11-12 17:59:34 UTC
Если при создании сайта, вы все-таки решили использовать БД то(щас скажу ужасную банальность), — стоит начать создание сайта с её проектирования, на бумаге, ну или в голове, а затем на бумаге или ином носителе. Я говорю так, потому что видел, что большинство сразу кидается создавать таблицы и работать с ними не отходя от кассы.
Начать стоит с описания данных ну или требований к будущей БД. Вот как это делал я в самом начале создания этого сайта.
1. Требования к данным
1.1 Разделы
В разделах сайта и находится все его информационное наполнение. В разделах могут находиться другие разделы (подразделы). Информация, сохраняемая, о разделе включает в себя:
- Уникальный номер раздела
- Уникальный номер раздела-родителя (если есть)
- Каталог, где находится данный раздел
- Название раздела в меню навигации
- Краткое описание раздела (если есть)
- Ключевые слова
1.2 Материалы (информационное наполнение)
Разделы могут содержать информационное наполнение в виде статей, документов и т.д. Информация, сохраняемая о материалах, включает в себя:
- Порядковый номер материала
- Заголовок материала
- Краткая аннотация (чистый текст без тегов)
- Основной текст материала (могут быть теги XML)
- Режим, в котором хранится материал (XML, asis)
- Дата публикации
- Дата последнего редактирования
- Информация о разделе, которому принадлежит материал
- Информация о дополнительных материалах по теме (гиперссылки)
- Данные об авторе материала
- Ключевые слова
1.3 Гиперссылки
Каждый раздел, материал может иметь одну или несколько ссылок, относящихся к теме содержания. Одна и та же ссылка может подходить к нескольким разделам или материалам. Информация, сохраняемая о гиперссылках, включает в себя:
- Адрес
- Название
- Краткое описание
- Категория ссылки
1.4 Авторы
Каждый материал имеет своего автора. Информация, сохраняемая об авторах, включает в себя:
- Фамилия
- Имя
- Отчество
- Какое-либо имя (ник), например имя пользователя в сети или имя, придуманное самим автором. Имя должно быть уникально.
- пароль
По данному описанию можно выделить основные сущности, которые будут представлены таблицами БД, а также атрибуты этих сущностей(столбцы таблиц БД).
2. Типы сущностей
- раздел
- материал
- гиперссылка
- автор
3. Типы связей
Тип сущности | Связь | Тип сущности | Кардинальность | Показатель участия |
---|---|---|---|---|
Раздел | Содержит | Материал | 1:M | P:T |
Раздел | Имеет | Ссылка | M:N | P:P |
Материал | Имеет | Ссылка | M:N | P:P |
Автор | Публикует | Материал | 1:M | P:T |
Краткие пояснения
Кардинальность — это тип связи:
- 1:M — один ко многим
- M:N — многие ко многим
Показатель участия характеризует обязательность/необязательность наличия данной связи для каждого кортежа(строки) сущности(таблицы), может быть:
- P — частичное участие в связи
- T — полное участие в связи
Из таблицы связей видно, что некоторые связи являются связями многие ко многим, поэтому для устранения этого пришлось вводить дополнительные сущности(таблицы) — ссылка для материала и ссылка для раздела. Кроме того, я решил вынести категорию ссылок в отдельную сущность, для того чтобы иметь возможность для каждой категории наличие описания(вдруг мне потом захочется сделать отдельный раздел ссылок) и поскольку введение дополнительного атрибута для описания категории в таблицу ссылок приведет к нарушению 3-й нормальной формы, пришлось делать декомпозицию.
По этому описанию я построил следующую схему БД и реализовал её:
Небольшое замечание к схеме:
В MySQL связи между таблицами нельзя сделать средствами самой БД, приходится извращаться с несколькими запросоми, реализующими требуемую ссылочную целостность. Для «нормальных СУБД" поддержка ссылочной целостности осуществляется средствами самой СУБД.