Предполагается, что вы уже определились с реляционной базой данных, так как вы указали SQL Server в своих тегах и что модель, о которой вы спрашиваете, является дизайном таблицы для описанной проблемы.
В дизайне базы данных много обсуждений наследования, а некоторые - discussed here.
Я бы сказал, что, если сущности не похожи друг на друга, нет смысла делиться такими вещами, как имена в общей таблице. С другой стороны, если вам нужен один набор географических координат и тип значка для отображения на карте, то этот набор, очевидно, может быть связан с типами сущностей. Тем не менее, можно было решить это с помощью UNION во время запроса, поэтому, возможно, это не должно быть вашим основным принципом проектирования, если география не является основным аспектом вашего приложения, и даже тогда можно просто разделить геолокацию на свою собственную таблицу с соответствующей индексацией ,
Я бы сначала выложил все атрибуты для ваших разных сущностей и решил, какие из них очень похожи. Некоторые из них будут настолько похожи, что они будут в одной таблице с колонкой индикаторов типа. Например, вы указали больницу и клинику - я не могу представить, что у них было бы очень много различий, если бы у вас не было подробной информации об услугах или подразделениях, и даже тогда я ожидаю, что клиника будет просто больницей с меньшим количеством записей в связанных с ней услуг или отделов.
Меня больше интересовала природа необычных качеств, потому что, если они не были очень обширными, все эти сущности, казалось бы, были в одной таблице. Поскольку первый шаг в моделировании реляционных данных состоит в том, чтобы сначала идентифицировать все данные атрибута, а затем определить отношения с ключами-кандидатами, я хотел бы сначала собрать атрибуты atttributes и посмотреть, сколько там различий.
Оптимизация для поиска будет зависеть от того, как определяются ваши поисковые запросы. Например, если вы ищете по местоположению, у вас могут быть теги, отмеченные только областью метро или полной географической привязкой. Существует индексация, которая поможет вам найти на расстоянии от места. Если вам нужно выбрать только определенные типы объектов, вы должны убедиться, что ваши индексы включали этот столбец. На данный момент денормализация не поможет вашему поиску так же, как индексирование, которое охватывает запросы. Денормализация работает лучше всего, когда результирующие множества велики. Точкой поиска является предоставление пользователям наборов результатов, которые по определению должны быть небольшими, чтобы они могли найти их полезными. Список 1000 ресторанов не полезен для пользователя, так как они могут есть только за несколько минут в день.
Что касается удобства использования, я предполагаю, что вы говорите об облегчении доступа с точки зрения программирования. Если вы закончите с моделью EAV, вы всегда сможете упростить запрос с помощью представлений. Если у вас есть единая таблица сущностей, но вам нужны более простые способы получить только больницы, то опять-таки взгляды могут помочь, поэтому только потому, что у вас есть определенная базовая модель базы данных, вы все равно можете представить ее на другие уровни системы по-разному, и эти не всегда обязательно представляют много проблем с производительностью, поскольку оптимизатор может очень хорошо работать с представлениями (пока они не сталкиваются с вещами, с которыми им трудно работать, подобно агрегатам, которые мешают им перестраивать их так же легко).
Как вы думаете, что вам нужно сделать? Вы найдете, что получите лучшее качество ответа и что люди охотнее готовы помочь вам, если вы сможете продемонстрировать, что вы [попробовали что-то для себя] (http://mattgemmell.com/2008/12/08/what -ты пробовал/). [Переполнение стека не будет просто реконструировать что-то для вас] (http://meta.stackexchange.com/a/131866/179419). – Ben
извините за это; это не то, что я намеревался сделать, просто мне нравится, как это делает yelp.com. – RaedK
Начните сначала с нормированной реляционной модели; затем, беспокоиться о поисках; вы можете использовать Sphinx или Solr для быстрого и расширенного поиска без необходимости денормализации ваших данных.(также, ваш дизайн базы данных не имеет ничего общего с «простотой использования», если у пользователя нет прямого доступа к базе данных через SQL ... ;-)) – Rafa