2014-01-05 2 views
0

У меня вопрос о дизайне и производительности БД.Лучшая производительность для дизайна SQL DB?

Представьте себе следующий сценарий:

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

  1. Я могу конструировать 3 таблицы, а Productcolor таблицу с ProductID и Color колонн, затем один для ProductSize с ProductID, колонн весом, и ProductType стол с ProductID и Type. И повторите один продукт с разными цветами, масками и типами. и используйте объединение, чтобы иметь общие свойства.

  2. У меня может быть цвет, вес, столбцы типа в таблице Product и отдельные значения с помощью разделителя типа «,».

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

+2

# 1 будет почти нормальной нормализацией базы данных, к которой вы должны стремиться - подход № 2 - это уродливый взлом, который вызовет у вас печаль и беспокойство и потеряет производительность снова и снова в течение срока действия вашего приложения ... –

+1

Как многие говорили, разделенное поле, классическая плохая идея, если вы этого не сделаете и никогда не захотите найти продукты с одним или несколькими из этих свойств в sql-запросе. Если бы это было так, тогда вам было бы лучше выбрать вариант NoSQl. –

ответ

0

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

В своем втором предположении вы говорите о том, чтобы положить вес и тип цвета в один столбец, предположительно строку, содержащую что-то вроде «Red, 2kg, Widgets»? Если это так, никогда не делайте этого. Это самый худший способ поместить материал в базу данных.

+0

нет, во втором случае я имел в виду 3 отдельных столбца с отдельными значениями каждого атрибута. например: цветная колонка = красный, синий, черный. Вес столбца = 120k, 130k ... –

0

попробуйте этот пример!

Создать таблицу продуктов, как

Product_Id | Product_Name 
1   | Product's first name 

Теперь, используйте другую таблицу и записать свойства и настройки к нему! Таким образом,

Product_Id | Product_Color | Product_Weight | Product_Type 
1   | Color of it | Its weight  | Type of it! 

Теперь, если вы хотите сохранить их (цвет, вес, тип) тоже можно создать раздельные таблицы для них тоже! Как это:

Color_Id | Color_Name 
1  | Red 
2  | Green 

Теперь, после того, как все это вы можете просто сохранить Color_Id в Product_Properties.

Дизайн базы данных имеет некоторые свойства и некоторые правила, которые необходимо соблюдать для лучшего дизайна базы данных! Что включает в себя, что

  1. Каждый тип данных должен иметь свой собственный стол!

  2. Данные не должен повторить (дублирующие данные должны быть удалены или перемещены на место с отдельной идентичностью данных)

  3. Вы должны попытаться сохранить первичный ключ для данных и использовать его!

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

+0

Эти атрибуты не связаны друг с другом, поэтому у меня будет 3 подтаблицы, каждая из которых имеет всего 2 столбца, например Productid и colorid. или productid и типа ... это хорошо? таким образом у меня будет слишком много таблиц! –

+0

Вы можете создать столько таблиц, сколько хотите @maryammohammadi .. но единственная распространенная среди них будет «Product_Id'..by, в которой вы будете отличать продукты так, чтобы каждый из них обладал собственным достоинством! :) –

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