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

Первый вариант тоже фтопку.
Александр52Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями .Ну дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?!
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #38292888
Александр52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MniorНу дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?!
Вы предлагаете плодить кучу уникальных таблиц, причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД.
Ну вот не хочу я еще и на это тратить свое время, хочу сделать один раз, и не возвращаться постоянно.
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #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
Нужна помощь в грамотном проектировании БД.
    #38292980
автор посмотрите в сторону такого решения, если доп. параметры не несут функциональной нагрузки, а только информационную.

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

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

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

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

PS. делаете что-то вроде Яндекс-Маркет?
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #38293024
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр52если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо.
С какого перепою? Транспонировать выборку на клиенте не позволяют кривые руки?
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #38293031
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр52... чтобы было ХО-РО-ШО!
И как Вы это понимаете?..
Незная специфики, объемов, ... ни даже СУБД - я могу только посоветовать незаниматься фигней а взять готовое решение.
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #38293091
Александр52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы.
Cane Cat Fisher, мы агрегируем яндексмаркет, прайс.ру и еще несколько десятков источников у себя.
На кону новая версия - а значит новые возможности для пользователя.
Злой Бобр, если более внимательно прочитать - можно определить с какого форума перенесена тема, объем около 20 тб.
Гость333, спасибо за PIVOT.
...
Рейтинг: 0 / 0
Нужна помощь в грамотном проектировании БД.
    #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
Нужна помощь в грамотном проектировании БД.
    #38293335
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр52Вы предлагаете плодить кучу уникальных таблицДа, таблица-сущность.
Александр52причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД.Вот эта наглая подлая клевета. Если бы вы зашли на тот пост, то увидели, что там автоматизирован процесс. Сделали инсерт и хоп - табличка, сделали другой и хоп набор столбцов.
sparse столбцыПрофтыкали мэсадж 14416183 EAV зло Хотелось бы пресечь болтологию сразу.
Cane Cat FisherНо ограничение "не хочу создавать таблиц" в реальных проектах выглядит странно.Слова не мальчика, но мужа.

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

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

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

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

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

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


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