Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужна помощь в грамотном проектировании БД. / 19 сообщений из 19, страница 1 из 1
10.06.2013, 15:41
    #38292768
Александр52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Добрый день!
Сразу к делу:
Разрабатывается БД под новый проект.
Есть, например, 20-30 категорий, у каждой категории свой набор параметров( зачастую уникальных). Посоветуйте как спроектировать БД, чтобы было ХО-РО-ШО!
Рассматривался вариант создания одной большой таблицы параметров, но на каждую категорию приходится по 10-15 параметров. Соответственно при добавлении новой категории придется вручную добавлять новые столбцы. Итого получится огромная некрасивая разреженная таблица с кучей NULL’ов(да и число столбцов в ms sql ограничено до 1024). Просто не вариант при каждой новой категории добавлять столбцы.
Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями.
И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Посоветуйте, как лучше решить эту задачку?
...
Рейтинг: 0 / 0
10.06.2013, 15:48
    #38292780
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Зачем 10 раз джойнить? Можете привести пример?
...
Рейтинг: 0 / 0
10.06.2013, 15:51
    #38292788
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Посоветуйте, как лучше решить эту задачку?
Добрый день. А зачем 10 джоинов?
...
Рейтинг: 0 / 0
10.06.2013, 16:13
    #38292851
Александр52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Сергей Викт., Гость333, пример:
у меня есть 2 таблички. О первой одна запись, во второй три. Сджойнив их, мы получим три строки. Мне же нужно вывести их одной строкой, причем не объединяя в одну ячейку.
т.е. есть:
Велосипед | красный
Велосипед | семискоростной
Велосипед | облегченный
нужно:
Велосипед | красный | семискоростной | облегченный. ( каждое свойство в своей ячейке).
...
Рейтинг: 0 / 0
10.06.2013, 16:15
    #38292859
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Посоветуйте, как лучше решить эту задачку?Хрен с джоинами. Вы херите на корню весь смысл. Ни статистики ни нормальное использования. Потом будете жаловаться почему планы в запросах идиотские и как разруливать FK и другую дребедень.
EAV зло

Первый вариант тоже фтопку.
Александр52Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями .Ну дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?!
...
Рейтинг: 0 / 0
10.06.2013, 16:25
    #38292888
Александр52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
MniorНу дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?!
Вы предлагаете плодить кучу уникальных таблиц, причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД.
Ну вот не хочу я еще и на это тратить свое время, хочу сделать один раз, и не возвращаться постоянно.
...
Рейтинг: 0 / 0
10.06.2013, 16:35
    #38292901
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Сергей Викт., Гость333, пример:
у меня есть 2 таблички. О первой одна запись, во второй три. Сджойнив их, мы получим три строки. Мне же нужно вывести их одной строкой, причем не объединяя в одну ячейку.
т.е. есть:
Велосипед | красный
Велосипед | семискоростной
Велосипед | облегченный
нужно:
Велосипед | красный | семискоростной | облегченный. ( каждое свойство в своей ячейке).
Вот так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @tab table (category varchar(100), parameter varchar(100), parameter_value varchar(100));

insert @tab values ('Велосипед', 'цвет', 'красный');
insert @tab values ('Велосипед', 'скорость', 'семискоростной');
insert @tab values ('Велосипед', 'вес', 'облегченный');

select category, цвет, скорость, вес
from @tab t
     pivot (min(parameter_value) for parameter in (цвет, скорость, вес)) pvt;
...
Рейтинг: 0 / 0
10.06.2013, 17:09
    #38292980
Нужна помощь в грамотном проектировании БД.
автор посмотрите в сторону такого решения, если доп. параметры не несут функциональной нагрузки, а только информационную.

id_cat (pk), cat_name, ....some_common_columns..., cat_spec_props XML

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
10.06.2013, 17:25
    #38293003
Мистер Хенки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Добрый день!
Сразу к делу:
Разрабатывается БД под новый проект.
Есть, например, 20-30 категорий, у каждой категории свой набор параметров( зачастую уникальных). Посоветуйте как спроектировать БД, чтобы было ХО-РО-ШО!
Рассматривался вариант создания одной большой таблицы параметров, но на каждую категорию приходится по 10-15 параметров. Соответственно при добавлении новой категории придется вручную добавлять новые столбцы. Итого получится огромная некрасивая разреженная таблица с кучей NULL’ов(да и число столбцов в ms sql ограничено до 1024). Просто не вариант при каждой новой категории добавлять столбцы.
Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями.
И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Посоветуйте, как лучше решить эту задачку?
по поводу разряженной таблицы добавлю, что можно использовать sparse столбцы и получить некоторую экономию по месту занимаемому строками, потом можно совместить 1 и 2 подход, чтобы не хранить в одной таблице куриц-несушек и автозапчасти, создать какие то базовые категории. Третий вариант имхо чреват чрезмерным использованием динамики в запросах. Тут вот еще XML предлагали, но это не совсем реляционный подход и будет ли с ним хорошо в плане проверки ограничений целостности и быстродействия.
...
Рейтинг: 0 / 0
10.06.2013, 17:31
    #38293017
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52,

В учебных и "домашних" масштабах все три решения в принципе работоспособны.

В реальных проектах каждый их них будет иметь свои ограничения и недостатки. С какими из них можно смириться - зависит от конкретики задачи, здесь пока не озвученной. Но ограничение "не хочу создавать таблиц" в реальных проектах выглядит странно.

PS. делаете что-то вроде Яндекс-Маркет?
...
Рейтинг: 0 / 0
10.06.2013, 17:36
    #38293024
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
С какого перепою? Транспонировать выборку на клиенте не позволяют кривые руки?
...
Рейтинг: 0 / 0
10.06.2013, 17:42
    #38293031
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52... чтобы было ХО-РО-ШО!
И как Вы это понимаете?..
Незная специфики, объемов, ... ни даже СУБД - я могу только посоветовать незаниматься фигней а взять готовое решение.
...
Рейтинг: 0 / 0
10.06.2013, 18:17
    #38293091
Александр52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Спасибо за ответы.
Cane Cat Fisher, мы агрегируем яндексмаркет, прайс.ру и еще несколько десятков источников у себя.
На кону новая версия - а значит новые возможности для пользователя.
Злой Бобр, если более внимательно прочитать - можно определить с какого форума перенесена тема, объем около 20 тб.
Гость333, спасибо за PIVOT.
...
Рейтинг: 0 / 0
10.06.2013, 18:21
    #38293094
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Добрый день!
Сразу к делу:
Разрабатывается БД под новый проект.
Есть, например, 20-30 категорий, у каждой категории свой набор параметров( зачастую уникальных). Посоветуйте как спроектировать БД, чтобы было ХО-РО-ШО!
Рассматривался вариант создания одной большой таблицы параметров, но на каждую категорию приходится по 10-15 параметров. Соответственно при добавлении новой категории придется вручную добавлять новые столбцы. Итого получится огромная некрасивая разреженная таблица с кучей NULL’ов(да и число столбцов в ms sql ограничено до 1024). Просто не вариант при каждой новой категории добавлять столбцы.
Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями.
И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
Посоветуйте, как лучше решить эту задачку?

как модификация 1-го варианта, где
p[N] - N= MAX(параметров одного типа категории)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table category(id int primary key, id_type int, catname varchar(50), p1 int, p2 int, p3 int,..., p20 int)
create table params(id int primary key, id_type int, paramname varchar(50), pi_position int)

create view cat_bicycle
as
select id,catname, p1 as [color], p2 as [size]
where id_type=1

create view cat_airplan
as
select id,catname, p1 as [enginetype], p2 as [maxspeed], p3 as [cargo_capacity]
where id_type=2

...
...
Рейтинг: 0 / 0
10.06.2013, 23:43
    #38293335
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52Вы предлагаете плодить кучу уникальных таблицДа, таблица-сущность.
Александр52причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД.Вот эта наглая подлая клевета. Если бы вы зашли на тот пост, то увидели, что там автоматизирован процесс. Сделали инсерт и хоп - табличка, сделали другой и хоп набор столбцов.
sparse столбцыПрофтыкали мэсадж 14416183 EAV зло Хотелось бы пресечь болтологию сразу.
Cane Cat FisherНо ограничение "не хочу создавать таблиц" в реальных проектах выглядит странно.Слова не мальчика, но мужа.

Одно дело когда советуют то что сами не юзали, а другое дело когда собственной #опой многократно всё почувствовал. А также собрал мнения коллег из других контор. Это я про гуру форуме не говорю.
Но, если вы хотите что-то на коленке пабыстраму налабать и скинуть кому нибудь это фигню, то совет - не оставляйте контактов, могут и не простить.
...
Рейтинг: 0 / 0
10.06.2013, 23:46
    #38293336
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
> Разрабатывается БД под новый проект.

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

> например, 20-30 категорий

у вас искаженное представление о реальном мире. Категории - грубая линейная классификация. На ее основе в принципе невозможно построить удобное решение.
...
Рейтинг: 0 / 0
11.06.2013, 00:34
    #38293361
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
Александр52,

Решай через ооп, наследие эти категории.
...
Рейтинг: 0 / 0
11.06.2013, 00:47
    #38293364
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
> Решай через ооп, наследие эти категории.

Вот и я говорю: читаешь форум и понимаешь, почему растет тихоокеанская группировка спутников.
...
Рейтинг: 0 / 0
11.06.2013, 04:48
    #38293413
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в грамотном проектировании БД.
guest_20040621> Решай через ооп, наследие эти категории.
Вот и я говорю: читаешь форум и понимаешь, почему растет тихоокеанская группировка спутников.Там где мода, всегда жопа.:)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужна помощь в грамотном проектировании БД. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]