2002-11-12 17:59:34 UTC

Если при создании сайта, вы все-таки решили использовать БД то(щас скажу ужасную банальность), — стоит начать создание сайта с её проектирования, на бумаге, ну или в голове, а затем на бумаге или ином носителе. Я говорю так, потому что видел, что большинство сразу кидается создавать таблицы и работать с ними не отходя от кассы.

Начать стоит с описания данных ну или требований к будущей БД. Вот как это делал я в самом начале создания этого сайта.

1. Требования к данным

1.1 Разделы

В разделах сайта и находится все его информационное наполнение. В разделах могут находиться другие разделы (подразделы). Информация, сохраняемая, о разделе включает в себя:

  • Уникальный номер раздела
  • Уникальный номер раздела-родителя (если есть)
  • Каталог, где находится данный раздел
  • Название раздела в меню навигации
  • Краткое описание раздела (если есть)
  • Ключевые слова

1.2 Материалы (информационное наполнение)

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

  • Порядковый номер материала
  • Заголовок материала
  • Краткая аннотация (чистый текст без тегов)
  • Основной текст материала (могут быть теги XML)
  • Режим, в котором хранится материал (XML, asis)
  • Дата публикации
  • Дата последнего редактирования
  • Информация о разделе, которому принадлежит материал
  • Информация о дополнительных материалах по теме (гиперссылки)
  • Данные об авторе материала
  • Ключевые слова

1.3 Гиперссылки

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

  • Адрес
  • Название
  • Краткое описание
  • Категория ссылки

1.4 Авторы

Каждый материал имеет своего автора. Информация, сохраняемая об авторах, включает в себя:

  • Фамилия
  • Имя
  • Отчество
  • E-mail
  • Какое-либо имя (ник), например имя пользователя в сети или имя, придуманное самим автором. Имя должно быть уникально.
  • пароль

По данному описанию можно выделить основные сущности, которые будут представлены таблицами БД, а также атрибуты этих сущностей(столбцы таблиц БД).

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-й нормальной формы, пришлось делать декомпозицию.

По этому описанию я построил следующую схему БД и реализовал её:

ERD диаграмма базы данных

Небольшое замечание к схеме:

В MySQL связи между таблицами нельзя сделать средствами самой БД, приходится извращаться с несколькими запросоми, реализующими требуемую ссылочную целостность. Для «нормальных СУБД" поддержка ссылочной целостности осуществляется средствами самой СУБД.

2002-11-12 17:59:34 UTC dbms noweb web