Мы работаем над приложением сопоставления, которое использует API Карт Google для отображения точек на карте. В настоящее время все баллы извлекаются из базы данных MySQL (хранятся несколько записей 5M +). В настоящее время все объекты хранятся в отдельных таблицах с атрибутами, представляющими отдельные свойства.Правила проектирования баз данных для программиста
Это представляет следующие проблемы:
Каждый раз, когда есть новое свойство, которое мы должны внести изменения в базу данных, код приложения и передний конец. Все это прекрасно, но некоторые свойства должны быть добавлены для всех объектов, так что это становится кошмаром, чтобы пройти через 50 разных таблиц и добавить новые свойства.
Невозможно найти все объекты, которые делят какое-либо данное свойство, например. никоим образом не найти всех школ/колледжей или университетов, имеющих отдел географии (без учета школ, университетов и колледжей отдельно).
Удаление имущества одинаково болезненно.
Нет стандартов для определения свойств в отдельных таблицах. Такое же свойство может существовать с другим именем или типом данных в другой таблице.
Невозможно связать или сгруппировать точки в зависимости от их свойств (как-то связанных с пунктом 2).
Мы собираемся переделать всю базу данных, но без помощи DBA и отсутствия профессионального опыта проектирования БД, который мы действительно боремся.
Еще одна проблема, с которой мы сталкиваемся с новым дизайном, заключается в том, что между объектами существует множество общих атрибутов/свойств.
Например:
Предприятие называется "университет" имеет более 100 атрибутов. Другие организации (например, больницы, банки и т. Д.) Имеют довольно много атрибутов в университетах, например, в машинах, стоянках, кафетериях и т. Д.
Мы не хотим иметь свойства в отдельной таблице [а затем связывание их с объектами w/foreign keys], поскольку это потребует от нас добавления/удаления вручную. Также обобщающие свойства получат группы, содержащие более 50 атрибутов. Не все записи (т. Е. Объекты) требуют этих свойств.
Так с сохранением, что в виду то, что мы думаем о новом дизайне:
имеют отдельные таблицы для каждого объекта, содержащие некоторую базовую информацию, например, Идентификатор, имя и т.д. и т.п.
Есть 2 таблицы типа атрибута и атрибута для хранения свойств информации.
Link каждый объект (или таблицы, если вы хотите), чтобы атрибут используя многие-ко-многим.
Адрес магазина в другой таблице, называемый адресов объектов связи через внешние ключи.
Мы считаем, что это позволит нам быть более гибкими при добавлении, удалении или запросе атрибутов.
Этот проект, однако, приведет к увеличению числа объединений при выборке данных egto показать все «атрибуты» для данного университета мы могли бы иметь запрос с 20+ присоединяется, чтобы извлечь все атрибуты, связанные в одной строке ,
Нам отчаянно нужно знать некоторые мнения или возможные недостатки в этом дизайнерском подходе.
Спасибо за ваше время.
Конечно, EAV может быть худшим кошмаром, который вы когда-либо видели. – HLGEM 2010-12-02 20:29:27