2010-12-28 2 views
3

для моего сайта у меня есть таблицыКак создать лучшую таблицу структуру

Category :: id | name 
Product :: id | name | categoryid 

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

Size :: id | name | categoryid | price 

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

Ingredient :: id | name | sizeid | categoryid | price 

Я не уверен, если это структура действительно нормализуется есть. Может кто-то, пожалуйста, помогите мне оптимизировать эту структуру и проиндексировать мне эту структуру?

+0

Возможно, было бы проще узнать, нормализовано ли оно, если вы предоставили небольшой пример данных примера (например, между 2 и 5 примерами строк в таблице), который демонстрирует, как вы будете использовать эти таблицы на практике. Это облегчит обнаружение возможной избыточности. –

ответ

0

Категория :: id | наименование
Продукт :: id | имя | categoryid
Размер :: id | имя |
Ingredient :: id | имя |
Категория_дизайн :: id | Категории | Размер ID | Цена
Категория_Ingredient :: id | categoryID | ИнгредиентыID | Цена

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

1

И эти ингредиенты имеют разные цены для разных размеров.

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

Ingredient :: id | name 

Ingredient_Price :: ingredientid | sizeid | price 

Ingredient_Category :: ingredientid | categoryid 
+0

Спасибо за ответ, не могли бы вы объяснить его немного больше, почему это лучше. Заранее спасибо. – user160820

+0

@ user160820: Я отделил соотношение между ингредиентами и категориями от соотношения между размером ингредиента и его ценой. Это уменьшает избыточность, если цена не зависит от категории. Я также избегаю дублирования имени ингредиента, снова уменьшая избыточность и предотвращая аномалии модификации: http://en.wikipedia.org/wiki/Database_normalization#Free_the_database_of_modification_anomalies –

0

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

product.categoryId, 
size.categoryId, 
ingredient.categoryId, 
ingredient.sizeId 

В зависимости от размера таблиц, а также на то, что вы можете захотеть, чтобы отобразить элементы в алфавитном порядке, вы также можете индексировать все поля имен.

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