База данных в HTML / Habr
Предыстория
Собственно меня давно просят сделать поиск для сайта. Там конечно очень мало чего искать, но как задел на ближайшее будущее. В планах добавление новых единиц для поиска. Этот туманный и не изученный мной альбион SQL отпугивал своей загадочностью. Но не в файлах же хранить данные. Стоп, а почему бы и нет? Поиск производить с помощью JavaScript. Я подумал о том, что можно в скрипт подгружать данные для поиска и т.д. Заразила меня эта идея, и, когда я приступил к написанию, подумал: «А зачем так усложнять? Пусть всё будет на странице, а пункты не подходящие по характеристикам будут просто скрываться». Заодно и страница поисковикам видна со всеми результатами. Пользователю доступны все данные сразу, и остаётся только выбирать автономно от сервера. Страницу можно сжать и в кэш положить на веки вечные.
История
HTML
Создал новый HTML файл и начал свои эксперименты. Добавил select:
<select id=»style» onchange=»filter_changed()»>
<option value=»»>Стиль:</option>
<option>неоклассицизм</option>
<option>постмодерн</option>
<option>псевдомодерн</option>
<option>неоготика</option>
</select>
Добавил div с данными:
<div class=»home whiteframe»>
<a class=»url» href=»kirpich.example.com/#rust»>
<img class=»image» src=»kirpich.example.com/thmb/rust/rust_vid-1.jpg»/>
</a>
<div class=»name»>
<a class=»url» href=»kirpich.example.com/#rust»>
«Руст»
</a></div>
<div class=»style»>неоклассицизм</div>
<div class=»wall_material»>керамический кирпич, утепленный минеральной ватой</div>
<div class=»square»>165.5</div>
<div class=»living_space»>86</div>
<div class=»floors»>2</div>
</div>
Выбирать что есть. Из чего тоже есть. Теперь осталось сделать чем.
JavaScript
Создал JS файл.
И так первое что нам нужно сделать — это обработать все пункты. Это просто:
function filter_changed(){
var list = document.getElementsByClassName(«home»);
for (var i=0;i<list.length;i++)
hide(list[i], is_filtred(list[i]));
}
Теперь надо определить подходит ли этот пункт под заданные характеристики.
function is_filtred(node){
if (no_text(node, «style»)) return true;
}
function no_text(node, filter){
var style_filter = get(document.getElementById(filter),[«value»]);
var home_style = get(node.getElementsByClassName(filter),[0,»textContent»]);
if (style_filter && (!home_style || (home_style.indexOf(style_filter)<0)))
return true;
}
Если мы не находим заданной характеристики то элемент скрывается.
function hide(node, h){
node.style.display = h?»none»:»block»;
}
Так. С этим справились. Но есть ещё величины, которые списком не задашь. Для них делаем фильтр.
function is_filtred(node){
if (no_text(node, «style»)) return true;
if (compare(node, «square»)) return true;
}
function compare(node, filter, comparer){
var square_filter = get(document.getElementById(filter),[«value»]);var home_square = get(node.getElementsByClassName(filter),[0,»textContent»]);
if (square_filter && !home_square)
return true;
else if (square_filter && home_square){
square_filter = parseFloat(square_filter)
home_square = parseFloat(home_square)
if ((!comparer||comparer==»>»)?square_filter > home_square:comparer==»<«?square_filter < home_square:comparer==»=»?square_filter!=home_square:false)
return true;
}
}
Ну вот вроде и все. Ах да. Что ж за get такой?
function get(node, keys){
for (var i=0; (i<keys.length) && node; i++)
node = node[keys[i]];
return node
}
Он предотвращает ошибку, если вдруг элемент или его свойство не найдены.
CSS
Так как в HTML у нас представлены голые данные, а нам надо дать пользователю понимание, на что он смотрит, добавляем в CSS такие строки.
.name::before{
content: «Название: «;
color: gray;
}
.style::before{
content: «Стиль: «;
color: gray;
}
.wall_material::before{
content: «Материал стен: «;
color: gray;
}
.square::before{
content: «Общая площадь: «;
color: gray;
}
.square::after, .living_space::after{
content: » кв. м.»;
color: gray;
}
.floors::before{
content: «Этажи: «;
color: gray;
}
.living_space::before{
content: «Жилая площадь: «;
color: gray;
}
Поскольку эти данные вторичны, мы даем действительно значащему контенту выйти на первый план, задав серый цвет этому тексту.
Заключение
Просто и надеюсь быстро. Не для миллионных списков, но с небольшим количеством данных, думаю, справится. Ну и плюс для меня — наполнение можно переложить на чужие плечи, ибо это просто.
Продолжение: Пусть css ищет или база данных в HTML 2
Как создать базу данных на хостинге и связать ее с сайтом?
От автора: Мы живем в век информации, поэтому людьми были разработаны достаточно удобные технологии для ее хранения. Сегодня я покажу вам, как создать базу данных на хостинге и зачем это вообще необходимо.
Я уже думаю, что вы и сами понимаете, для чего нужна БД – для хранения данных. При установке вручную любого движка от вас потребуется ее создание. Ну хорошо, а как же это сделать? Для этого есть как минимум 2 простых способа.
Создание БД через панель управления сервером
Пожалуй, это самый простой вариант. Любой хостинг предоставляет вам Cpanel или любую другую панель, чтобы управлять вашими сайтами. Там вы можете найти пункт “Базы данных”, где можно в визуальном режиме создать новую БД, нового пользователя, после чего связать его с базой. Пользователя создавать и не обязательно, если он уже создан. В качестве прав нужно установить все, если это администраторский профиль.
Создание базы данных на хостинге утилитой PhpMyAdmin
На самом деле утилит для работы с MySQL и другими БД много, но с этой встречаются чаще всего. Создать базу в phpmyadmin тоже легко.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнееНажимаем Базы данных и появится список баз, а также возможность добавить новую, вписав ее имя. После создания нужно будет также добавить или создать нового пользователя для БД. Для этого у новой базы отредактируйте привилегии.
Как видите, тут можно посмотреть, какие пользователи уже имеют доступ к БД, а также добавить нового.
Перенос БД и ее загрузка на другой хостинг
Прежде всего, хочу скачать, что ваша БД – это вообще практически самое важное и ценное, чем вы обладаете. Ведь это все записи, страницы, отзывы, комментарии и все, что там еще может быть на сайте. И если это пропадет, то для вас это полная беда. Поэтому первым делом позаботьтесь о том, чтобы постоянно совершалось резервное копирование базы, причем желательно в несколько мест. Таким образом, вы защитите себя.
Если что, расширение дампа базы данных – sql. То есть на компьютер вы скачиваете именно дамп БД. Ну а как же, собственно, загрузить БД? Лучше всего для этого использовать всю ту же утилиту – PhpMyAdmin. Зайдем в нее. Там есть кнопка Импорт, но пока не трогаем его. Для начала нужно будет создать новую БД или удалить все таблицы в старой.
Короче, вам нужна чистая, голая БД. Выбираем ее и вот именно в нее импортируем наш дамп. Если все прошло успешно, вы увидите появляющиеся в БД таблицы, а со временем убедитесь в правильности своих действий, когда перейдете на сайт, для которого все эти манипуляции и совершались.
Интересно, что все это можно совершить и через панель управления сервером. Там тоже есть возможность закачивать дампы баз данных.
Как связать с сайтом?
Связка происходит автоматически на этапе установки движка. Там вы указываете имя БД, имя пользователя и его пароль для доступа к базе, сервер (почти всегда localhost) и префикс таблиц. Но если вдруг в процессе работы что-то меняется, то нужно будет изменить данные.
Например, вы поменяли имя базы или удалили пользователя и назначили другого. Соответственно, если вы не поменяете нужные параметры, при заходе на сайт будет отображаться ошибка соединения с БД и ни о какой работе ресурса нельзя будет даже говорить.
В связи с этим, СРАЗУ же после внесения подобных изменений нужно изменять и соответствующие параметры. Если у вас движок wordpress, то они хранятся в файле wp-config. В частности, там есть такие константы:
DB_NAME – имя базы данных. DB_USER – имя пользователя DB_PASSWORD – пароль
DB_NAME – имя базы данных. DB_USER – имя пользователя DB_PASSWORD – пароль |
А также переменная: $table_prefix;
Соответственно, вы должны убедиться, что значения этих параметров соответствуют действительности. Никаких ошибок быть не должно. В других движках такие настройки тоже присутствуют.
Может ли быть несколько баз на хостинге?
Конечно, абсолютно никаких проблем. 1 БД на 1 сайт (в большинстве случаев). Если у вас несколько сайтов, то будет и несколько БД. У крупного ресурса может быть несколько БД для разных разделов. Например, если вы решите установить на сайт форум, то для него можно будет создать свою БД.
В общем, все это основы основ работы с БД, если вдруг вы захотите изучить работу с MySQL (а это язык, с помощью которого работают с базами даных) от А до Я, то у нас для вас есть замечательный курс, продолжительностью более 20-ти часов, в котором вы сможете освоить эту технологию раз и навсегда.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнееХотите изучить MySQL?
Посмотрите курс по базе данных MySQL!
СмотретьПрограммирование сайтов выполняется с целью создания некоторого полезного функционала. Работа с базами данных — это одна из важнейших составляющих программирования сайтов динамического типа. Будь то формирование страниц «на лету» или же реагирование на действия посетителей сайтов — взаимодействие с базами данных требуется всегда. Базы данных для сайтов(БД) используются с целью хранения различной информации и, упрощенно, представляют собой некоторый набор взаимосвязанных таблиц. Размеры таблиц в БД различны, их количество произвольно. Именно в базах данных хранится на сервере требуемая для работы сайта информация, например, информация о клиентах, каталог товаров, статистические данные и т. д. Программирование сайтов динамического типа выполняется при помощи различных скриптов, разделяемых обычно на серверные и клиентские. Программирование сайтов с помощью серверных скриптов позволяет обрабатывать данные, введенные посетителями сайтов в веб-формы, генерировать динамические страницы, отсылать и принимать cookies. Для получения информации, требуемой при выполнении подобных действий, серверные скрипты обращаются к базам данных. Обращение скрипта к БД называется запросом. Для построения запросов к базам данных широко применяется SQL (Structured Query Language) — «язык структурированных запросов». С помощью SQL может осуществляться добавление, удаление, редактирование записей в таблицах баз данных, выборка данных в соответствии с различными условиями, сортировка данных и многое другое. В программировании сайтов управление БД осуществляется при помощи клиент-серверных систем управления базами данных (СУБД), таких как Oracle, MS SQL Server, PostgreSQL, MySQL и др. Клиент-серверные СУБД обрабатывают запросы централизованно, к их достоинствам относят обеспечение высокой надежности баз данных, высокой доступности и высокой безопасности. СУБД MySQL — свободная система управления базами данных, одна из наиболее часто применяемых в программировании сайтов. СУБД MySQL поддерживает большое количество существующих типов таблиц (InnoDB, MyISAM и т. д.), а благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц. Управление базами данных с помощью MySQL очень удобно, что сделало данную систему востребованной и популярной. Система управления реляционными базами данных Microsoft SQL Server поставляется компанией Microsoft на коммерческой основе (за исключением бесплатной редакции Express Edition). Данная СУБД использует язык запросов Transact-SQL, поддерживается операционными системами семейства Windows Desktop/Server. В СУБД Microsoft SQL Server присутствует графическое ПО для конструирования и оптимизации запросов (SQL Management Studio и Studio Express). Объектно-реляционная система управления базами данных компании Oracle — Oracle Database — работает на Windows, Unix, Linux, MacOS. Oracle Database, в отличие от MySQL, например, имеет более широкую область применения. СУБД Oracle обладает высокой производительностью, широким функционалом, уникальными технологиями (RAC, RAT и т. д.). В программировании сайтов для небольших и средних компаний применяется достаточно редко ввиду своей высокой стоимости. К тому же, довольно сложно найти хостинг с поддержкой данной СУБД. Cвободная система управления базами данных PostgreSQL существует в редакциях для Linux, Solaris/OpenSolaris, Win32, Win x86-64, Mac OS X, FreeBSD, QNX 4.25, QNX 6. Базируется на языке SQL. Среди преимуществ PostgreSQL выделяют поддержку БД практически неограниченного размера, наличие надежных механизмов репликации, легкую расширяемость, поддержку большого набора встроенных типов данных и многое другое. Программирование сайтов, взаимодействующих различным образом с базами данных, включает несколько основных этапов работы с БД: построение запросов к БД с помощью языка SQL, программирование сценариев для обработки этих запросов и программирование модулей для отображения результатов обработки запросов. Избыточное число обращений от сайтов к базам данных делает загрузку сайтов более медленной, увеличивает нагрузку на сервер. В результате возможны сбои в работе сайтов, вплоть до полного прекращения доступа. Уменьшение количества запросов к БД позволяет уменьшить нагрузку на сервер, а также уменьшить время загрузки динамических страниц с сервера. Поэтому оптимизация взаимодействия сайтов с базами данных — это одна из задач профессионального программирования сайтов. Специалисты студии веб-дизайна WebStudio2U осуществляют программирование сайтов различной степени сложности В студии веб-дизайна WebStudio2U вы можете заказать изготовление как простых сайтов, обладающих минимально необходимым набором функций, так и создание сложных корпоративных сайтов, интернет-порталов или онлайн-магазинов, предоставляющих своим пользователям множество различных функций: онлайн-консультирование, возможность онлайн-заказов, автоматическое обновление позиций в каталогах товаров и многое другое. Заказать изготовление и программирование сайтов в WebStudio2U вы можете прямо сейчас! Теги: |
Как создать базу данных для сайта
В этой статье я расскажу как с помощью онлайн сервиса QuintaDB создать базу данных для сайта или блога.
Сегодня самый простой и быстрый способ создать базу для сайта — это использование онлайн сервиса QuintaDB:
- 1) Вам не нужны знания языков программирования (PHP, HTML) или каких-либо веб-технологий, например, MySQL;
- 2) Весь процесс создания базы данных очень прост и занимает всего несколько минут;
- 3) Вы можете редактировать свою базу вместе с друзьями;
- 4) Доступна функциональность поиска и сортировки записей в базе данных, импорта данных из Excel и экспорта данных в Excel.
Итак приступаем к созданию базы данных:
Зарегистрируйтесь на сайте QuintaDB.ru любым удобным для вас способом.
Создайте новый проект и форму (для одного проекта вы можете создавать неограниченное количество форм). Для этого перейдите в меню «Мои проекты» и нажмите кнопку «Создать проект«.
Здесь можно выбрать различные варианты: «Создать проект с нуля«, «Выбрать готовую веб-форму«, «Импортировать данные из Excel/CSV«.
Рассмотрим вариант «Создать проект с нуля«.
После нажатия соответствующей кнопки, необходимо ввести название проекта и первой формы нового проекта.
Для сохранения нажимаем на кнопку «Создать». Наш проект создан, а мы перенаправлены на страницу добавления полей на форму.
Читайте подробно о создании веб-форм в статье Поля необходимые для создания онлайн форм в генераторе форм QuintaDB, Функциональность полей веб-форм QuintaDB.
Теперь добавим несколько полей на форму, которые будут служить колонками в таблице данных. Для добавления поля нажимаем кнопку «Добавить новое поле на форму«, указываем название поля и его тип, который определяет тип вводимой в данное поле информации (текст, числа, файлы и т.д.).
Видео с примером создания формы:
Теперь данную форму можно использовать для заполнения базы данных.
Также добавить запись в базу данных вы можете в меню Записи. Жмем на кнопку «Добавить новую запись«, откроется наша форму, заполняем ее и жмем на кнопку «Создать«.
Для работы с созданной базой доступны следующие функции: поиск данных, группировка, сортировка. Вы всегда можете экспортировать все записи в Excel и PDF файл.
С базой данных возможно работать совместно со своими коллегами, друзьями. Подробнее о функциональности Команда читайте здесь.
Чтобы настроить функциональность формы или таблицы базы данных, переходим в меню «Виджет Формы» или «Виджет Таблицы«.
Далее для интеграции базы данных на сайт перейдите во вкладку Интеграция, скопируйте iframe код для вставки и разместите его на нужной странице сайта. (Нажмите на картинку, чтобы увеличить)
Для использования имеющихся готовых форм при создании обратите внимание на блок «Создать форму по шаблону» и выберите стрелками подходящий шаблон. После этого нажмите на кнопку «Использовать форму«.
В несколько кликов и буквально за 2 минуты мы создали Регистрационную форму. Теперь мы можем разместить ее на свой сайт и принимать отзывы от пользователей.
И последний способ создания формы — это «Импорт данных«.
В этом случае необходимо будет загрузить файл формата excel, csv или txt, который будет импортирован в таблицу. При этом автоматически будет создана форма, названия полей будут соответствовать заголовкам столбцов из файла.
Какой из способов использовать решать Вам, а мы будем работать над добавлением полезных функций в соответствии с присланными пожеланиями!
Пожалуйста, войдите в QuintaDB чтобы иметь возможность оставлять комментарии
Поделиться обсуждением в социальных сетях: Tweet
Твое лучшее бизнес решение QuintaDB
Сделать веб-форму с базой данных на сайт онлайн. База данных и конструктор web форм QuintaDBЧто такое QuintaDB?
QuintaDB — это онлайн конструктор веб-форм и баз данных. Вам не нужно будет тратить время на изучение какого-либо языка программирования. Создавайте формы, диаграммы, карты всего в несколько кликов и поместите их на свою веб-страницу.
Создать CRM базу данных
Что мы можем Вам предложить
Создание веб-формы
Импорт и Экспорт данных
Рассылки
Создание виджета
Настройте внешний вид вашей формы, используя готовые шаблоны или загрузите свой собственный стиль. Интегрируйте виджет веб-формы на вашу веб-страницу.
Создать виджет для сайтаОнлайн базы данных
Работа с командой
Командный
модуль
Командный модуль позволяет добавить любое количество пользователей с разным уровнем доступа и организовать совместное управление данными.
Удобная организация
командной работы
Возможность регистрации пользователей непосредственно на вашем портале, без необходимости создания аккаунта в QuintaDB.ru. Пользователи будут иметь доступ к открытым для них модулям (формы, таблицы, графики, карты, календари, отчеты), а также возможность загружать файлы и добавлять данные.
Командный календарь,
напоминания
Возможность настроить SMS и Email уведомления с напоминанием о предстоящих событиях. Напоминания помогают быть в курсе любых важных событий и изменений в проекте, их можно получать как на электронную почту, так и по SMS. Гибкий в настройках календарь.
О сервисе QuintaDB
QuintaDB – это возможность создать базу данных, веб-формы и виджеты любой сложности в режиме онлайн. Сервис прост в использовании и не требует специальных знаний и установки дополнительного программного обеспечения. Всю необходимую информацию вы сможете отыскать на нашем сайте.
Скачать презентациюДоступные цены для любого бизнеса
КОРПОРАТИВНЫЙ
$14.97
Проектирование Базы Данных. Лучшие практики / OTUS. Онлайн-образование corporate blog / Habr
В преддверии старта очередного потока по курсу «Базы данных» подготовили небольшой авторский материал с важными советами по конструированию БД. Надеемся данный материал будет полезен для вас.Базы данных повсюду: от простейших блогов и директорий до надежных информационных систем и крупных социальных сетей. Не настолько важно, простая или сложная база данных, насколько существенно спроектировать ее правильно. Когда база спроектирована бездумно и без четкого понимания цели, она не просто не эффективна, но и дальнейшая работа с базой будет реальным мучением, непроходимым лесом для пользователей. Вот несколько советов по конструированию базы данных, которые помогут создать полезный и простой в использовании продукт.
1. Определите, для чего таблица и какова ее структура
Сегодня такие методы разработки, как Scrum или RAD (быстрая разработка приложения), помогают ИТ-командам быстро разрабатывать базы данных. Однако, в погоне за временем очень велик соблазн погрузиться сразу в построение базы, смутно представляя, в чем же сама цель, какие должны быть конечные результаты.
Как будто команда нацелена на эффективную, скоростную работу, но это мираж. Чем дальше и быстрее погружаться вглубь проекта, тем больше потребуется времени, чтобы выявить и изменить ошибки в проекте базы.
Поэтому первое, что нужно решить — это определить цель для вашей базы данных. Для какого типа приложения разрабатывается база? Пользователь будет лишь работать с записями и нужно уделить внимание транзакциям или его больше интересует аналитика данных? Где база должна быть развернута? Будет ли она отслеживать поведение клиентов или же просто управлять отношениями между ними?
Чем раньше команда проектирования ответит на эти вопросы, тем мягче, плавнее пройдет процесс проектирования базы данных.
2. Какие данные выбрать для хранения?
Планируйте наперед. Мысли о том, что в будущем будет делать сайт или система, для которых проектируется база данных. Важно выходить за рамки простых требований технического задания. Только пожалуйста, не начинайте размышлять сразу обо всех возможных типах данных, которые когда-либо будет хранить пользователь. Лучше подумайте о том, смогут ли пользователи писать посты, загружать документы или фотографии или обмениваться сообщениями. Если это так, то в базе нужно выделить место под них.
Работайте с командой, департаментом или организацией, для которых в будущем будет поддерживаться проектируемая база. Общайтесь с людьми разных уровней, от специалистов по работе с клиентами до глав отделов. Так с помощью обратной связи вы получите четкое представление о требованиях компании.
Неизбежно потребности пользователей в рамках даже одного департамента будут конфликтовать. Если вы столкнетесь с этим, не бойтесь опереться на собственный опыт и найти компромисс, который устроит все стороны и будет удовлетворять конечной цели БД. Будьте уверенны: в будущем вам прилетит +100500 в карму и гора печенек.
3. Моделируйте данные с осторожностью
Есть несколько ключевых моментов, на которые стоит обратить внимание при моделировании данных. Как мы уже ранее говорили, от назначения базы данных зависит, какие методы использовать при моделировании. Если мы проектируем базу данных для оперативной обработки записей (OLTP), иными словами для их создания, редактирования и удаления, то используем моделирование транзакций. Если же база данных должна быть реляционной, то лучше всего применять многомерное моделирование.
Во время моделирования строятся концептуальные (CDM), физические (PDM) и логические (LDM) модели данных.
Концептуальные модели описывают сущности и типы данных, которые они включают, а также отношения между ними. Делите ваши данные на логические куски — так намного проще жить.
Главное — мера, не переусердствуйте.
Если сущность очень сложно классифицировать одним словом или фразой, то пришло время использовать подтипы (дочерние сущности).
Если же сущность ведет собственную жизнь, имеет атрибуты, которые описывают ее поведение и ее вид, а также отношения с другими объектами, то смело можно использовать не только подтип, но и супертип ( родительская сущность).
Если пренебречь этим правилом, другие разработчики запутаются в вашей модели и не до конца будут понимать данные и правила, как их собирать.
Реализуются концептуальные модели с помощью логических. Эти модели словно дорожная карта для проектирования физической базы данных. В логической модели выделяются сущности бизнес-данных, определяются типы данных, статус ключа правила, которые регулируют отношения между данными.
Затем Логическая модель данных сопоставляется с выбранной заранее платформой СУБД (системы управления базами данных) и получается Физическая модель. Она описывает способ физического хранения данных.
4. Используйте подходящие типы данных
Применение неправильного типа данных может привести к менее точным данным, трудностям в объединении таблиц, синхронизации атрибутов и к раздуванию размеров файлов.
Чтобы гарантировать целостность информации, атрибут должен содержать только приемлемые для него типы данных. Если в базу данных вносится возраст, то убедитесь, что в колонке хранятся целые числа из максимум 3 цифр.
Создавайте минимум пустых столбцов со значением NULL. Если вы создаете все столбцы как NULL, это грубая ошибка. Если же вам нужен пустой столбец для исполнения конкретной бизнес-функции, когда данные неизвестны или еще не имеют смысла, то смело создавайте. Ведь мы же не можем заранее заполнить столбцы “Дата смерти” или “Дата увольнения”, мы же не предсказатели тыкать пальцем в небо :-).
Большинство софта для моделирования (ER/Studio, MySQL Workbench, SQL DBM, gliffy.
com) данных позволяет создавать прототипы областей данных. Так гарантируется не только правильный тип данных, логика приложения и хорошая производительность, но также и обязательное задание значения.
5. Предпочитайте естественное
Когда вы решаете, какой столбец в таблице выбрать в качестве ключа, всегда обращайте внимание, какие поля может редактировать пользователь. Никогда не выбирайте их в качестве ключа — плохая идея. Произойти может все что угодно, а вы должны гарантировать уникальность.
Лучше всего использовать естественный, или бизнес, ключ (natural key). Он имеет смысловое значение, так вы избежите дублирования в базе данных.
Если только бизнес-ключ не уникален (имя, фамилия, должность) и повторяется в разных строках таблицы или он должен изменяться, то первичным ключом стоит назначить сгенерированный искусственный, суррогатный ключ (artificial key).
6. Нормализуйте в меру
Чтобы эффективно организовать данные в БД, необходимо следовать набору рекомендаций и нормализовать базу данных. Существует пять нормальных форм, которым нужно следовать.
С помощью нормализации вы избежите избыточности и обеспечите целостность данных, использующихся в приложении или на сайте.
Как всегда, всего должно быть в меру, даже нормализации. Если в БД слишком много таблиц с одинаковыми уникальными ключами, то вы увлеклись и чрезмерно нормализовали базу данных. Излишняя нормализация негативно влияет на производительность базы данных.
7. Тестируйте пораньше, тестируйте почаще
Тестовый план и надлежащее тестирование должны быть частью проектирования базы данных.
Лучше всего тестировать базу данных путем Continuous Integration (непрерывной интеграции). Моделируйте сценарий “Один день из жизни базы данных” и проверяйте, все ли граничные случаи обрабатываются, какие взаимодействия пользователей вероятны. Чем раньше вы найдете баги, тем больше сэкономите и времени, и денег.
Это всего лишь семь советов, с помощью которых вы можете спроектировать отличную базу данных по производительности и эффективности. Если будете следовать им, вы избежите большинства головных болей в будущем. Эти советы — всего лишь верхушка айсберга в моделировании базы данных. Существует огромное число лайфхаков. Какими пользуетесь вы?
Кошерная структура базы данных сайта объявлений? — Хабр Q&A
Добрый день.Хочу сделать доску объявлений так как не смог найти достойных скриптов в инете. (может кто-то знает качественный скрипт?) Требуется функционал поиска и фильтров как в irr.ru и avito.ru, тоесть каждая категория может иметь свои поля, по которым можно фильтровать поиск.
Поля соответственно могут быть различных типов: text, select, checkbox, radiobutton с множественным выбором, year, date, coordinates и «select, зависящий от другого select-а» (например выбираем город и появляется список районов этого города, или выбираем марку машины, появляется список моделей этой марки).
Пока структура базы данных представляется так:
Таблица field_selectable_value_category осуществляет зависимость между «зависимыми select-ами».
Возможные действия с базой на сайте:
1) админка:
— создать/редактировать/удалить объявление
— создать/редактировать/удалить категорию
— создать/редактировать/удалить поле
— отобразить поля определенной категории
— отобразить объявления определенной категории
— отобразить дерево зависимых select-ов
— отобразить дерево категорий
2) личный кабинет:
— отобразить объявления со всеми полями
— создать/редактировать/удалить объявление
— отобразить дерево категорий
3) фронтенд:
— отобразить объявления определенной категории
— одновременный поиск по тексту объявления, фильтр по полям и сортировка по цене, тексту, дате
— отобразить поля определенной категории
— отобразить дерево категорий
— отобразить объявления со всеми полями
Получается, чтобы отфильтровать объявления, надо сделать join объявлений, категорий и фильтруемых полей, которых может быть 5-10. Более того, надо в это же время искать поисковую фразу по тексту объявления.
Одна из идей — при создании/редактировании объявления заполнять дополнительное поле text_cache фразой состоящей из текста объявления и списка полей, например «текст объявления; field_1: mercedes, field_2: 2007», и производить поиск по данному полю. Данный способ также хорош тем, что если человек вводит поисковую фразу «mercedes 2007» логично отобразить ему объявления с полями: марка — mercedes, год создания — 2007, а не только искать эту фразу в тексте самого объявления.
Кроме того, не могу решить где наилучшим образом хранить данные, можно например таблицы field, category… хранить в mysql, а сами объявления со всеми их данными — в mongodb, тогда когда нужно будет отфильтровать объявления, не нужно будет делать join по множеству полей, а просто выбрать нужную запись со всеми данными. Но я не уверен, что в mongodb есть полнотекстовый поиск, сравнимый со sphinx, elasticsearch или solr, поэтому возможно придется подключить еще и поисковый движок. (кто-то может сказать точно, есть ли в mongodb хороший полнотекстовый поиск?)
Вообщем и целом советы и исправления приветствуются.