Имеете фактические, но дублирующие данные в таблице или ссылаетесь на их идентификатор и запускаете два запроса или более сложный запрос? - PullRequest
1 голос
/ 06 июля 2011

enter image description here

Учитывая предыдущие таблицы, я выбираю имена детей и их любимые цитаты.С точки зрения скорости, эффективности и наилучших методов проектирования баз данных, что лучше?Должен ли я иметь фактическую цитату в таблице kids или мне не нужно иметь фактическую цитату, а ссылаться на ее идентификатор, а затем выполнить другой запрос, чтобы получить ее из таблицы quotes?

Ответы [ 4 ]

2 голосов
/ 06 июля 2011

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

1 голос
/ 06 июля 2011

Лучше использовать ссылочный идентификатор цитаты, чем дублировать поле favorite_quote.

0 голосов
/ 06 июля 2011

Для меня это зависит от того, как используются данные.

Например, если информация требуется на каждой странице, например

Привет, Тимми, мы видим, что тебе все еще 8 лет, и твоя любимая цитата: «Действие - бла-бла-бла»

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

Надеюсь, это поможет.

0 голосов
/ 06 июля 2011

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

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

Ведение отдельной таблицы quote облегчит управление и улучшит общую производительность.

EDIT:

Чтобы ответить на вопрос в комментарии, вам необходимо поле quote_id в Kids до JOIN on:

SELECT k.Name, q.Favorite_Quote
FROM kids k
LEFT JOIN quotes q
    ON q.id = k.quote_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...