leonid26 Posted June 27, 2011 Report Share Posted June 27, 2011 Уместно ли динамическое создание таблиц средствами скрипта или я двигаюсь к пропасти??? Quote Link to comment Share on other sites More sharing options...
0 Veseloff Posted June 27, 2011 Report Share Posted June 27, 2011 Уместно ли динамическое создание таблиц средствами скрипта или я двигаюсь к пропасти???Смотря чего хотите этим добиться. Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 27, 2011 Author Report Share Posted June 27, 2011 добавление категории товаров в интернет магазине. У каждой категории свой набор свойств по этому я пришел к необходимости динамически менять структуру базы, а именно создавать для каждой категории новую таблицу одним из столбцов которой будет id товара, а остальные содержат его свойства. Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 27, 2011 Report Share Posted June 27, 2011 Вы имеете ввиду таблиц в MySQL базе? Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 27, 2011 Author Report Share Posted June 27, 2011 да Quote Link to comment Share on other sites More sharing options...
0 Veseloff Posted June 27, 2011 Report Share Posted June 27, 2011 По мне, так плохая затея в данном случае. Я тоже когда-то думал так сделать, но остановился на создании трёх дополнительных таблиц— Свойства (весь набор свойств)— Свойства-категории (тут хранится связка свойст в категорий)— Свойства-товары (тут хранятся значения каждого из свойств для каждого товара)По ним легко производить фильтрацию и делать какие угодно выборки. Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 27, 2011 Report Share Posted June 27, 2011 По мне, так плохая затея в данном случае. Я тоже когда-то думал так сделать, но остановился на создании трёх дополнительных таблиц— Свойства (весь набор свойств)— Свойства-категории (тут хранится связка свойст в категорий)— Свойства-товары (тут хранятся значения каждого из свойств для каждого товара)По ним легко производить фильтрацию и делать какие угодно выборки.+1, динамическо создание баз это может привести оч. большому их кол-ву, что в дальнейшем будет способствовать отсутствию контроля за ними. И делать под каждую базу выборку отдельно тоже не есть гуд Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 27, 2011 Author Report Share Posted June 27, 2011 получается дублирование значений в таблице свойства товары, если я правильно понял.id товара: id свойства: значение свойства1:1:101:3:151:6:синийМожно структуру поподробнее в SQL виде? Quote Link to comment Share on other sites More sharing options...
0 Veseloff Posted June 27, 2011 Report Share Posted June 27, 2011 получается дублирование значений в таблице свойства товары, если я правильно понял.id товара: id свойства: значение свойства1:1:101:3:151:6:синийДа, как-то так. Для выборки можно использовать CONCAT_WS+GROUP_CONCAT, чтобы не было избычотности данных, как это может быть при JOIN Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 27, 2011 Author Report Share Posted June 27, 2011 но умные книжки говорят что повторение данных в таблицах это плохо. говорят, выносите в отдельную таблицу. Как быть? Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 27, 2011 Report Share Posted June 27, 2011 но умные книжки говорят что повторение данных в таблицах это плохо. говорят, выносите в отдельную таблицу. Как быть?хм, как говорится "смотри на других, а делай по-своему"лучше делать по структуре, что описана выше. И да, таблицы и делаются вообще то для однотипных/одинаковых данных как бэ.. Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 28, 2011 Author Report Share Posted June 28, 2011 (edited) Да да, для однотипных. но если дынные имеют вид 1:белый:длинный:горячий то не разумно размещать их как 1:белый;1:длинный;1:горячий андерстенд о чём я? к тому же придётся добавлять ключ указывающий тип свойства... или я всё же не понял структуру предложенную выше??? Edited June 28, 2011 by leonid26 Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 28, 2011 Report Share Posted June 28, 2011 Приведу пример.Можно создать 2 базы. Товар и св-ва.В Товаре есть допустим поле отвечающее за хранение id свойст в массиве.В Св-вах записаны все свойства методом id, propertyКогда нужно узнать свойство товара, то стоит вытащить массив из базы, посчитать кол-во элементов в нем, задать цикли вытащить все свойства уже из базы св-в.З.Ы. Если не понятно то стучи pes2009rus@yandex.ru попробую помочь. Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 29, 2011 Author Report Share Posted June 29, 2011 В общем получилась вот такая петрушка.create table products( id int not null primary key, vendor char(128) not null default 'undefined', device char(128) not null default 'undefined', group_id int not null);create table groups( id int prymary key auto_increment, name char(128) not null default 'undefined');create table propertes( group_id int not null name char(128) not null, title char(128) not null default 'undefiden');ну и плюс динамически создаваемые таблицы для каждой группы. Не на говорить что это плохо, скажите какие вы видите проблемы и ваши вариации их решения. Буду благодарен. Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 29, 2011 Report Share Posted June 29, 2011 Вы меня не правильно понялиcreate table products( id int not null primary key, vendor char(128) not null default 'undefined', device char(128) not null default 'undefined', group_id int not null);create table propertes( id int not null primary key, name char(128) not null, title char(128) not null default 'undefiden');Вот всё что вам нужно. В первой таблице хранитесам товар и в group_id храните массив тип ('1','3','5')где все эти значения - это id свойства товара. Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 29, 2011 Author Report Share Posted June 29, 2011 в каждом поле таблицы должны храниться атомарные значения. Ваше предложения не отвечает даже NF1 Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 29, 2011 Report Share Posted June 29, 2011 (edited) я не знаю, что такое атомарные значения и т.п. Но могу сказать точно, предложенный мною вариант подходит в ваш случай.А вам по ходу дела не понять что я хочу до вас донести. Edited June 29, 2011 by Golgi Quote Link to comment Share on other sites More sharing options...
0 Veseloff Posted June 29, 2011 Report Share Posted June 29, 2011 в каждом поле таблицы должны храниться атомарные значения. Ваше предложения не отвечает даже NF1Это вы с кем сейчас разговаривали? Что вы понимаете под «атомарными значениями» и кто такой «NF1» и почему ему не отвечает предложение? Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 29, 2011 Author Report Share Posted June 29, 2011 (edited) http://ru.wikipedia.org/wiki/Первая_нормальная_формаНо всё же приношу извинения, не совсем хорошо понимаю фразу:В первой таблице хранитесам товар и в group_id храните массив тип ('1','3','5')где все эти значения - это id свойства товара.Хотя если так то выходит что я с лёгкостью могу выбрать все свойства одного товара, но что если мне нужно получить список товаров из определённой группы и к каждому товару выудить свойства, причём по некоторому условию (только те что удовлетворяют, к примеру или отсортированные по свойству) Edited June 29, 2011 by leonid26 Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 29, 2011 Report Share Posted June 29, 2011 По каждому товару выудить свойства в моем примере это очень просто. Нужно сделать выборку всех свойств, чьи id лежат в массиве у товара. При помощи чего засунуть массив в базу смотреть тутНу с отсортировкой по св-ву в моем примере есть небольшая проблемка, но она решается, если в таблице св-в, также добавить колонку, в которой хранился бы массив с id товаров, к которым принадлежит это св-во. Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 29, 2011 Author Report Share Posted June 29, 2011 ну конечно... просто супер хранить сериализованое значение массива в базе, а если будет необходимость фильтровать по одному из значений... ммм.. не пойдёт. Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 29, 2011 Report Share Posted June 29, 2011 Я всё больше замечаю, что вы отвечаете, слабо вникая в мои посты.Если надо будет фильтровать по одному из значений, то нужно добавить аналогичную колонку к таблице самих свойств и там тоже хранить массив, содержащий id товара, к которому он пренадлежит.З.Ы. Такое ощущение складывается, что вас вразумит только готовый код уже... Quote Link to comment Share on other sites More sharing options...
0 leonid26 Posted June 29, 2011 Author Report Share Posted June 29, 2011 Меня вразумит дельный совет от человека проектировавшего реальную базу интернет магазина. Да, в идеале я хотел бы готовое решение потому как задача типовая и думаю она давно решена и решение вылизано до идеального, его я и ищу. Моё решение полностью удовлетворяет мои потребности, но кажется мне громоздким, по этому я решил поискать совета профи. Quote Link to comment Share on other sites More sharing options...
0 Golgi Posted June 29, 2011 Report Share Posted June 29, 2011 Я под профи пока не сгожусь, поэтому больше не буду пытаться дать совет. Дело ваше Quote Link to comment Share on other sites More sharing options...
Question
leonid26
Уместно ли динамическое создание таблиц средствами скрипта или я двигаюсь к пропасти???
Link to comment
Share on other sites
23 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.