|
|
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Сразу к делу: Разрабатывается БД под новый проект. Есть, например, 20-30 категорий, у каждой категории свой набор параметров( зачастую уникальных). Посоветуйте как спроектировать БД, чтобы было ХО-РО-ШО! Рассматривался вариант создания одной большой таблицы параметров, но на каждую категорию приходится по 10-15 параметров. Соответственно при добавлении новой категории придется вручную добавлять новые столбцы. Итого получится огромная некрасивая разреженная таблица с кучей NULL’ов(да и число столбцов в ms sql ограничено до 1024). Просто не вариант при каждой новой категории добавлять столбцы. Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями. И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. Посоветуйте, как лучше решить эту задачку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 15:41 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. Зачем 10 раз джойнить? Можете привести пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 15:48 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. Посоветуйте, как лучше решить эту задачку? Добрый день. А зачем 10 джоинов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 15:51 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Сергей Викт., Гость333, пример: у меня есть 2 таблички. О первой одна запись, во второй три. Сджойнив их, мы получим три строки. Мне же нужно вывести их одной строкой, причем не объединяя в одну ячейку. т.е. есть: Велосипед | красный Велосипед | семискоростной Велосипед | облегченный нужно: Велосипед | красный | семискоростной | облегченный. ( каждое свойство в своей ячейке). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 16:13 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. Посоветуйте, как лучше решить эту задачку?Хрен с джоинами. Вы херите на корню весь смысл. Ни статистики ни нормальное использования. Потом будете жаловаться почему планы в запросах идиотские и как разруливать FK и другую дребедень. EAV зло Первый вариант тоже фтопку. Александр52Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями .Ну дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 16:15 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
MniorНу дык, представляете в скуле есть не только команда INSERT, но и команда CREATE/ALTER. Офигеть, да?! Вы предлагаете плодить кучу уникальных таблиц, причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД. Ну вот не хочу я еще и на это тратить свое время, хочу сделать один раз, и не возвращаться постоянно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 16:25 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52Сергей Викт., Гость333, пример: у меня есть 2 таблички. О первой одна запись, во второй три. Сджойнив их, мы получим три строки. Мне же нужно вывести их одной строкой, причем не объединяя в одну ячейку. т.е. есть: Велосипед | красный Велосипед | семискоростной Велосипед | облегченный нужно: Велосипед | красный | семискоростной | облегченный. ( каждое свойство в своей ячейке). Вот так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 16:35 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
автор посмотрите в сторону такого решения, если доп. параметры не несут функциональной нагрузки, а только информационную. id_cat (pk), cat_name, ....some_common_columns..., cat_spec_props XML Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:09 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52Добрый день! Сразу к делу: Разрабатывается БД под новый проект. Есть, например, 20-30 категорий, у каждой категории свой набор параметров( зачастую уникальных). Посоветуйте как спроектировать БД, чтобы было ХО-РО-ШО! Рассматривался вариант создания одной большой таблицы параметров, но на каждую категорию приходится по 10-15 параметров. Соответственно при добавлении новой категории придется вручную добавлять новые столбцы. Итого получится огромная некрасивая разреженная таблица с кучей NULL’ов(да и число столбцов в ms sql ограничено до 1024). Просто не вариант при каждой новой категории добавлять столбцы. Рассматривался вариант – на каждую категорию – свою небольшую табличку. Тут всё так же – при добавлении новой категории - придется добавлять новую таблицу с полями. И рассматривался третий вариант, когда создается одна таблица на все категории, состоящая из нескольких колонок, куда подряд(построчно) записываются новые параметры. Таким образом, получается «узкая», но длинная таблица. Тут при добавлении категории менять структуру не надо, будет происходить только вставка. Но тогда, если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. Посоветуйте, как лучше решить эту задачку? по поводу разряженной таблицы добавлю, что можно использовать sparse столбцы и получить некоторую экономию по месту занимаемому строками, потом можно совместить 1 и 2 подход, чтобы не хранить в одной таблице куриц-несушек и автозапчасти, создать какие то базовые категории. Третий вариант имхо чреват чрезмерным использованием динамики в запросах. Тут вот еще XML предлагали, но это не совсем реляционный подход и будет ли с ним хорошо в плане проверки ограничений целостности и быстродействия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:25 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52, В учебных и "домашних" масштабах все три решения в принципе работоспособны. В реальных проектах каждый их них будет иметь свои ограничения и недостатки. С какими из них можно смириться - зависит от конкретики задачи, здесь пока не озвученной. Но ограничение "не хочу создавать таблиц" в реальных проектах выглядит странно. PS. делаете что-то вроде Яндекс-Маркет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:31 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52если у одной категории, например 10 параметров, придется 10 раз джойнить таблицу саму на себя, что неприемлемо. С какого перепою? Транспонировать выборку на клиенте не позволяют кривые руки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:36 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52... чтобы было ХО-РО-ШО! И как Вы это понимаете?.. Незная специфики, объемов, ... ни даже СУБД - я могу только посоветовать незаниматься фигней а взять готовое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:42 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Cane Cat Fisher, мы агрегируем яндексмаркет, прайс.ру и еще несколько десятков источников у себя. На кону новая версия - а значит новые возможности для пользователя. Злой Бобр, если более внимательно прочитать - можно определить с какого форума перенесена тема, объем около 20 тб. Гость333, спасибо за PIVOT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 18:17 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 18:21 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52Вы предлагаете плодить кучу уникальных таблицДа, таблица-сущность. Александр52причем делать это руками, каждый раз при добавлении новой категории, узнавать новые поля, постоянно изменяя/добавляя структуру БД.Вот эта наглая подлая клевета. Если бы вы зашли на тот пост, то увидели, что там автоматизирован процесс. Сделали инсерт и хоп - табличка, сделали другой и хоп набор столбцов. sparse столбцыПрофтыкали мэсадж 14416183 EAV зло Хотелось бы пресечь болтологию сразу. Cane Cat FisherНо ограничение "не хочу создавать таблиц" в реальных проектах выглядит странно.Слова не мальчика, но мужа. Одно дело когда советуют то что сами не юзали, а другое дело когда собственной #опой многократно всё почувствовал. А также собрал мнения коллег из других контор. Это я про гуру форуме не говорю. Но, если вы хотите что-то на коленке пабыстраму налабать и скинуть кому нибудь это фигню, то совет - не оставляйте контактов, могут и не простить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 23:43 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
> Разрабатывается БД под новый проект. Для вашей постановки задачи нет хорошего решения. Два ключевых ограничения: вы собираетесь агрегировать данные, изначально описанные кривой структурой. Яндекс-маркет проектировали откровенные бараны, с прайс.ру ситуация получше, но и эту реализацию нельзя назвать приемлемой. И > например, 20-30 категорий у вас искаженное представление о реальном мире. Категории - грубая линейная классификация. На ее основе в принципе невозможно построить удобное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 23:46 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
Александр52, Решай через ооп, наследие эти категории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 00:34 |
|
||
|
Нужна помощь в грамотном проектировании БД.
|
|||
|---|---|---|---|
|
#18+
> Решай через ооп, наследие эти категории. Вот и я говорю: читаешь форум и понимаешь, почему растет тихоокеанская группировка спутников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 00:47 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38293361&tid=1541225]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 281ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...