Jump to content
  • 0

Динамическо создании и изменение таблиц


leonid26
 Share

Question

23 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0

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

— Свойства (весь набор свойств)

— Свойства-категории (тут хранится связка свойст в категорий)

— Свойства-товары (тут хранятся значения каждого из свойств для каждого товара)

По ним легко производить фильтрацию и делать какие угодно выборки.

Link to comment
Share on other sites

  • 0

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

— Свойства (весь набор свойств)

— Свойства-категории (тут хранится связка свойст в категорий)

— Свойства-товары (тут хранятся значения каждого из свойств для каждого товара)

По ним легко производить фильтрацию и делать какие угодно выборки.

+1, динамическо создание баз это может привести оч. большому их кол-ву, что в дальнейшем будет способствовать отсутствию контроля за ними. И делать под каждую базу выборку отдельно тоже не есть гуд

Link to comment
Share on other sites

  • 0

получается дублирование значений в таблице свойства товары, если я правильно понял.


id товара: id свойства: значение свойства
1:1:10
1:3:15
1:6:синий

Можно структуру поподробнее в SQL виде?

Link to comment
Share on other sites

  • 0

получается дублирование значений в таблице свойства товары, если я правильно понял.


id товара: id свойства: значение свойства
1:1:10
1:3:15
1:6:синий

Да, как-то так. Для выборки можно использовать CONCAT_WS+GROUP_CONCAT, чтобы не было избычотности данных, как это может быть при JOIN

Link to comment
Share on other sites

  • 0

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

хм, как говорится "смотри на других, а делай по-своему"

лучше делать по структуре, что описана выше. И да, таблицы и делаются вообще то для однотипных/одинаковых данных как бэ..

Link to comment
Share on other sites

  • 0

Да да, для однотипных. но если дынные имеют вид 1:белый:длинный:горячий то не разумно размещать их как 1:белый;1:длинный;1:горячий андерстенд о чём я? к тому же придётся добавлять ключ указывающий тип свойства... или я всё же не понял структуру предложенную выше???

Edited by leonid26
Link to comment
Share on other sites

  • 0

Приведу пример.

Можно создать 2 базы. Товар и св-ва.

В Товаре есть допустим поле отвечающее за хранение id свойст в массиве.

В Св-вах записаны все свойства методом id, property

Когда нужно узнать свойство товара, то стоит вытащить массив из базы, посчитать кол-во элементов в нем, задать цикл

и вытащить все свойства уже из базы св-в.

З.Ы. Если не понятно то стучи pes2009rus@yandex.ru попробую помочь.

Link to comment
Share on other sites

  • 0

В общем получилась вот такая петрушка.


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'
);

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

Link to comment
Share on other sites

  • 0

Вы меня не правильно поняли

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 свойства товара.

Link to comment
Share on other sites

  • 0

я не знаю, что такое атомарные значения и т.п.

Но могу сказать точно, предложенный мною вариант подходит в ваш случай.

А вам по ходу дела не понять что я хочу до вас донести.

Edited by Golgi
Link to comment
Share on other sites

  • 0

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

Это вы с кем сейчас разговаривали? Что вы понимаете под «атомарными значениями» и кто такой «NF1» и почему ему не отвечает предложение?

Link to comment
Share on other sites

  • 0

http://ru.wikipedia.org/wiki/Первая_нормальная_форма

Но всё же приношу извинения, не совсем хорошо понимаю фразу:

В первой таблице храните

сам товар и в group_id храните массив тип ('1','3','5')

где все эти значения - это id свойства товара.

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

Edited by leonid26
Link to comment
Share on other sites

  • 0

По каждому товару выудить свойства в моем примере это очень просто. Нужно сделать выборку всех свойств, чьи id лежат в массиве у товара.

При помощи чего засунуть массив в базу смотреть тут

Ну с отсортировкой по св-ву в моем примере есть небольшая проблемка, но она решается, если в таблице св-в, также добавить колонку, в которой хранился бы массив с id товаров, к которым принадлежит это св-во.

Link to comment
Share on other sites

  • 0

Я всё больше замечаю, что вы отвечаете, слабо вникая в мои посты.

Если надо будет фильтровать по одному из значений, то нужно добавить аналогичную колонку к таблице самих свойств и там тоже хранить массив, содержащий id товара, к которому он пренадлежит.

З.Ы. Такое ощущение складывается, что вас вразумит только готовый код уже...

Link to comment
Share on other sites

  • 0

Меня вразумит дельный совет от человека проектировавшего реальную базу интернет магазина. Да, в идеале я хотел бы готовое решение потому как задача типовая и думаю она давно решена и решение вылизано до идеального, его я и ищу. Моё решение полностью удовлетворяет мои потребности, но кажется мне громоздким, по этому я решил поискать совета профи.

Link to comment
Share on other sites

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.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy