SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.11.2010 08:42:26

fomalgout
Участник
Зарегистрирован: 14.11.2010
Сообщений: 2

Проблема: как создать таблицу с массивами (списками) в качестве полей?

Подскажите новичку, кто сталкивался...проблема следующая:

нужно создать таблицу, в которой часть полей может являться одномерными массивами записей (напр. типа TINYTEXT), количество которых наперед неизвестно. Например:

PRIMARY_ID     ТОВАР      КАТЕГОРИЯ,

где поле КАТЕГОРИЯ является списком категорий (с возможностью их добавления и удаления). Конечно можно просто сделать таблицу с заранее объявленной кучей столбцов (КАТЕГОРИЯ_1, КАТЕГОРИЯ_2 и т.п.), но как-то громоздко получается. Есть ли способ получше?

Неактивен

 

#2 14.11.2010 15:24:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема: как создать таблицу с массивами (списками) в качестве полей?

Да, способ получше называется «переход от keyvalue к реляционным базам данных».
Сделайте отдельную табличку для массивов записей, и храните в них помимо данных
id родительской строки. Касательно Вашего примера — нужна та таблица, которую Вы
описали без столбца КАТЕГОРИЯ, таблица категорий, и таблица, которая будет хранить
id из одной и из другой таблиц, обозначающую связь.

Неактивен

 

#3 15.11.2010 13:34:46

fomalgout
Участник
Зарегистрирован: 14.11.2010
Сообщений: 2

Re: Проблема: как создать таблицу с массивами (списками) в качестве полей?

Я наверное не совсем точно сформулировал вопрос. Если речь идет о небольшой базе - вроде бы все просто. Можно три таблицы создать, как Вы предложили. Можно поле КАТЕГОРИИ свернуть в строки (т.е. сериализацию сделать) и вообще обойтись одной таблицей. Или объявить столбцы с избыточностью (как в первом посте).

А если ТОВАРов тысячи, а КАТЕГОРИЙ - сотни, скорее всего любая из описанных баз будет нещадно тормозить, если конечно она как-нибудь не упорядочивается внутри. Вот в этом собственно и вопрос: MySQL сама умеет так делать или следует позаботиться об упорядочивании самому при заполнении базы?

Неактивен

 

#4 16.11.2010 00:15:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема: как создать таблицу с массивами (списками) в качестве полей?

Ну, давайте просто посчитаем. Товаров — тысячи. Округлим вверх до 10к.
Категорий — сотни. Округлим вверх до 1к. Пусть каждый товар входит в
каждую категорию, тогда в таблице связей будет
10 000 × 1 000 = 10 000 000 строк. Далее. Каждая строка состоит из двух
целых чисел, каждое по 4 байта. Итого 80 мегабайт. В начале 90х годов
это была бы большая таблица, а сейчас... ну, Вы меня поняли smile

Что касается упорядочивания — создайте индексы, и всё будет хорошо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson