2012-01-07 2 views
0

Если у меня есть список продуктов питания, каждый из которых имеет поле «курс», имеет ли смысл вводить курс в виде текста («Entree»), или мне будет лучше служить для создания таблицу курса, а затем использовать ссылку на внешний ключ? Это отношение «один ко многим» между курсом и едой, но правильная связь между питанием и курсом правильна?MySQL оптимизация структуры таблицы

Спасибо за любой совет.

+0

Каково ваше определение «еда» и каково ваше определение «курс»? –

+0

«Это отношения« один ко многим »между курсом и едой, но одноразовые отношения между едой и курсом« это немного запутанное заявление. –

ответ

1

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

UPDATE tblFood SET course = 'Main Entree' WHERE course = 'Entree' 

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

DBA однажды сказал мне, что MSSQL сделал ужасную работу с индексированием значений text/varchar, поэтому появился метод внешних таблиц ... не уверен, что я полностью верю в это, но на одном дыхании он сказал, что MySQL сделал намного лучшую работу, и делает запросы намного проще.

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

+0

, другими словами, сложно запросить информацию, потому что вам нужно использовать оператор JOIN, но проще для обновления? – Apollo

+0

Точно так как вы, скорее всего, имеете целое число или уникальный идентификатор, представляющий значение курса по сравнению с самим значением. Если вы думаете, что tblCourse будет иметь название курса плюс, возможно, поле активного флага и, возможно, приоритет ордера (так что вы можете заказать курсы), то, вероятно, будет дополнительная таблица. Если это будет только одно значение и никаких дополнительных полей в ближайшем будущем, то обновление может быть проблемой, но если вам удобны инструкции по обновлению, сделайте хорошие резервные копии своей системы перед выполнением таких обновлений, тогда вы должны быть в порядке с подход с одной таблицей. –

0

Я придерживаюсь 1: М для курса и пищи. Если это сценарий, я бы создал отдельную таблицу для курса и отдельную таблицу для еды и использовал course_id в качестве внешнего ключа на столе для еды.

В любом случае ввод курса в виде строки все равно будет работать, но проблема в том, что когда вы собираетесь делать обновление для определенного курса, вы все равно поедете на каждый пункт питания, имея этот курс, чтобы его обновить, а иногда и в некоторых ресторанах их курс заключается либо в том, что они могут добавлять, редактировать или удалять курс. :)

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