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