2011-01-11 3 views
0

Я не уверен, есть ли термин для описания этого, но я заметил, что системы управления контентом хранят все виды данных в одной таблице с их минимальными минимальными свойствами в то время как метаданные хранятся в другой таблице в виде пар значений ключа.Недостатки хранения всех «вещей» в центральной таблице

например. все (сообщения в блогах, страницы, изображения, события и т. д.) хранится в одной таблице и считается записью.

Я понимаю, что это позволяет абстракции и легкой расширяемости

мы рассматриваем проектирование наш новый проект таким образом. Это не совсем CMS, но мы планируем постоянно добавлять к нему модули. Предположим, вначале будут только сообщения и изображения, по которым могут быть опубликованы комментарии. Позже мы можем добавить видео, в которых также будет функция комментариев.

Каковы недостатки такого подхода? и будет ли он работать на такое требование, как наше?

Благодаря

+1

См. [Один синдром True Lookup] (http://www.simple-talk.com/community/blogs/philfactor/archive/2008/05/29/56525.aspx) или [Плохая карма] (http: /www.simple-talk.com/opinion/opinion-pieces/bad-carma/) за пару хороших статей на эту тему. –

ответ

1

Простота и расширяемость действительно часто привлекательные аспекты атрибута стоимости и (как вы говорите) «одна таблица вещей» подходов.

Нет 100% право Ответьте здесь - в зависимости от ваших целей производительности и пропускной способности и потребностей в расширяемости этот подход может сработать и для вас.

В большинстве случаев, когда вы знаете, какие данные вы будете хранить, обычно вам интересно моделировать разные объекты в свои собственные таблицы и соответствующим образом связывать данные. RDBMSes были задуманы и усовершенствованы в течение десятилетий, чтобы удовлетворить этот прецедент, и просто использовать таблицы, поскольку общие базы для захоронения обычно не приносят вам каких-либо особых преимуществ, за исключением того, что вы откладываете неизбежную необходимость правильно моделировать свои данные. Кроме того, когда вы варите все в один стол, вы вынуждаете пользователей за пределами вашего приложения (если у вас есть, например, авторы отчетов), чтобы бороться с вашей «моделью в модели», что может просто заставить людей расстраиваться, когда они писать запросы и т. д. И вы погрузитесь в свой самый низкий общий знаменатель - если вы хотите оптимизировать запросы о типе X, и у вас есть типы Y и Z в той же таблице, они будут влиять на производительность при запросе X.

Опять же, чтобы быть ясным, есть отличная выгода от подходов метаданных стиля «все вещи в одной таблице». Я сам их использовал, и по аналогичным соображениям против моделирования. Тем не менее, мой совет состоит в том, чтобы ограничить себя временем, когда вам действительно нужно это делать (т. Е. Вам нужно что-то реализовать, прежде чем вы сможете правильно моделировать пространство вещей, которое вам понадобится). Как правило, я нахожу себя в этом, когда я создаю прототипы сложных систем, и мне нужно что-то сделать раньше, чем позже.

2

Недостатком является то, что в главном столе будут появляться миллионы читаемых листов (и много писем тоже).

Это означает, что там будет много замков раздоров, тяжелые переиндексации и т.д.

Для того, чтобы смягчить этот бит, вы можете рассмотреть вопрос разделения «основной таблицы» в серии не столь главного столов ,

Скажет, вы будете иметь одну главную таблицу для «Сообщений» (возможно, уточненных через метаданные или подтаблицы для определенных типов сообщений, таких как липкие, Объявление, Курилке, частных ...)

Одна из основных таблиц для изображений (возможно, для gif, jpeg и т. д.)

Одна из главного стола для видео ...

Если это пользовательское приложение (и не предназначено, чтобы быть что-то, что должно быть «бесконечно оттиском и» как CMS или рамка портала) Я думаю, этот вид раскола является приемлемым и может обеспечить некоторую лучшую производительность (если вы ожидаете иметь большие объемы данных).

Что касается вашего комментария к «примерам» ... прежде всего, если вы снова сохраняете комментарии в одной гигантской таблице, у вас могут быть похожие проблемы, как если бы вы сохранили в ней все типы элементов. Предполагая, что это не проблема, вы можете, очевидно, поместить своего рода ссылочный ключ (конечно, вы не можете использовать обычные внешние ключи), который связывает комментарии с их исходным элементом.

Это прекрасно работает, когда вы переходите от элемента к комментариям, немного меньше, когда вам нужно переходить от комментариев к исходному элементу. Таким образом, компромисс о том, какие операции будут более частыми для вашей проблемы.

+0

Спасибо, что ответили. Имея отдельные таблицы, как вы предлагаете, это первое, что я подумал, и я очень убежден в этом подходе, чтобы быть откровенным. Но здесь я хочу, чтобы каждый из этих объектов был «комментарием». что означает, что для сопоставления комментариев с этими объектами будет 3 таблицы, если логика должна быть простой. Возможно, позже будет добавлена ​​функция рейтинга, что означает еще 3 таблицы и так далее. Есть ли стандартное решение для этого? Спасибо – naiquevin

+1

naiquevin, Нет ничего плохого в том, что у меня много таблиц i na database. Как вы моделируете комментарии, зависит от того, как вы собираетесь их использовать. – HLGEM

+0

отредактировал мой ответ для части комментариев ... –

Смежные вопросы