Дизайн DB: больше таблиц по сравнению с меньшим количеством таблиц

Обратите внимание, что вы, вероятно, смущены тем, что показано в toString и как равенство (equals) ведет себя.

То, что вы видите, является результатом toString(). Любой тип может решить, как может выглядеть его строковое представление, переопределив этот метод. Это, однако, не влияет на то, как объекты этого типа сравниваются друг с другом. Вот где появляется equals (в некоторых случаях также compare).

Другие писали что-то о том, что базовый тип сравниваемых объектов не равен (одна сторона StringBuilder и другая String). Однако актуальной проблемой является equals -метод. Возможно (обычно это не делается по разным причинам), что equals для определенного типа поддерживает равенство различных типов объектов (такое поведение (должно быть) должно быть упомянуто в интерфейсе по крайней мере). Если ничего не указано, можно предположить, что выполняется равенство по умолчанию из Object.equals .

В этом случае, однако, CharSequence -javadoc уже заявляет следующее о равенстве (выделено мое):

Этот интерфейс не уточняет общие контракты [ 1111] и hashCode методы. Результат проверки двух объектов, которые реализуют CharSequence на равенство, поэтому, как правило, не определен . Каждый объект может быть реализован отдельным классом, и нет никакой гарантии, что каждый класс сможет проверить свои экземпляры на равенство с другими. Поэтому нецелесообразно использовать произвольные экземпляры CharSequence в качестве элементов в наборе или в качестве ключей на карте.

blockquote>

Подводя итог: забудьте, что вы получили String или StringBuilder из subSequence и reversed. Контракт метода указывает CharSequence, и поэтому вы должны обрабатывать его как CharSequence. Нет гарантии, что эти функции все равно будут возвращать String или StringBuilder в будущем.

5
задан Ray 15 December 2008 в 16:51
поделиться

3 ответа

Позвольте мне спросить Вас это:

Что происходит, если два года с этого времени Вы решаете добавить 'музыкальное сообщение' как тип блога? Необходимо ли составить новую таблицу для MusicPost и затем повторно кодировать ли приложение для интеграции его? Или Вы вошли бы в систему своей панели администрации блога, добавьте тип блога в выпадающем поле под названием 'Музыка', и быть на Вашем веселом пути?

В этом случае, меньше таблиц!

5
ответ дан 13 December 2019 в 05:43
поделиться

Проблема подобна вопросу того, как глубоко Ваша иерархия должна быть в дизайне OO.

Простой подход в терминах OO должен был бы иметь базовый класс Post и дети для BlogPost, ForumPost и так далее. Comment мог или быть ребенок Post или его собственная иерархия, в зависимости от Ваших требований.

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

3
ответ дан 13 December 2019 в 05:43
поделиться

Обычно жизнь будет легче, если у Вас могут быть все сообщения в одной таблице:

  • меньше соединений для выполнения
  • меньше таблиц для поддержания
  • общие атрибуты не повторяются между таблицами
  • кодируйте более универсальный

Однако Вы могли столкнуться с некоторыми проблемами:

  • если каждый подтип имеет много своих собственных атрибутов, Вы могли бы закончить со многими столбцами - возможно, слишком многие для Вашего DBMS
  • если подтип имеет атрибут (например, сохраненное изображение), который является дорогим, чтобы Ваш DBMS поддержал, даже когда неиспользованный, Вы не могли бы хотеть тот столбец во всех строках

Если Вы работаете к такой проблеме, можно составить новую таблицу только для определенных атрибутов того подтипа сообщения - например:

create table posts (post_id number primary key, 
                    post_date date,
                    post_title ...); /* All the common attributes */

create table photo_post (post_id references posts, photograph ...);

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

Я не могу думать ни о какой заслуге в составлении отличной таблицы для каждого подтипа.

4
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: