Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Теоретический вопрос. Как правильно построить стру, Как правильно построить структуру таблиц 
:(
    Опции темы
buxNL
  Дата 25.2.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Всем - здраствуйте, я - человек новый, так что пинайте меня без зазрения совести (на нужные ссылки).

Итак:

Вводная

Есть объекты (много объектов) и их надо описать в БД

помимо основных признаков
(пара уровней, по которым можно сгруппировать более/менее эти объекты),

у каждого может существовать куча признаков, которых или нет в множестве, или пару раз встречаются во всем множестве всех объектов.

По самым скромным прикидкам, если завести на каждое необходимое свойство объекта - поле, то размерность таблицы в ширину станет больше количества строк, т.е в высоту....



Дополнительные условия

По ходу поступления предложений и по ходу моих рассуждений


Решение

Не разумно заводить такое несметное количество полей.

Что-то мне грезиться, что можно просто впихать все свойства в отдельную табличку, НО как в таком случае делать выборки по сходным полям.... т.е., если хоть у пары объектов (они могут быть в разных группах обоих уровней группировки) есть общий признак, то я эти объекты ОБЯЗАН выбрать простым SELECTом.... Даже более того - время от времени мне необходимо группировать ПО ВСЕМ признакам ВСЕ объекты.

Знаю, тут должна быть другая логика, и другая математика.... Пинайте!


Да... замена кучи полей на кучу таблиц - тоже... сомнительное решение...




PM MAIL   Вверх
Exception
Дата 25.2.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Можно примерчик?
PM   Вверх
igon
Дата 26.2.2006, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 3
Всего: 21



Попробуй посмотреть в сторону отношения "многие-ко-многим".
Кроме таблиц "Объекты" и "Свойства" нужна будет еще одна - кроссировочная, с двумя полями, ID_Объекта и ID_Свойства.


--------------------
Хотите поговорить об этом?
PM   Вверх
buxNL
Дата 26.2.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Цитата(Exception @ 25.2.2006, 22:31)
Можно примерчик?

Да, пожалуйста:

Id 0001 Объект | cтепень мохнатости (код из таблицы мохнатости) | вид ножки (код из таблицы вид ножки) | далее еще с десяток всяческих полей

Id 0002 Объект2 | твердость (код из таблицы твердости) | ворсистость (код из таблицы вид ворсистости) | далее еще с десяток всяческих полей

Id 0003 Объект3 | твердость (код из таблицы твердости) | волокнистось (код из таблицы вид волокнистости) | далее еще с десяток всяческих полей


и т.д. Где-то 600 объектов с такими расплывчатыми признаками.
База будет расти.

Пару обязательных полей, которые есть у всех объектов, и которые поддаются систематизации - я не показываю, ибо с ними все просто.

Пользователю по запросу из базы необходимо будет выбрать все объекты, у которых, к примеру значение твердости описывается (имеет не нулевое значение), и может быть сразу, а может быть и после первого запроса - объекты имеющие определенное значение твердости.

Тупое решение, сделать так

Объект | cтепень мохнатости (код из таблицы мохнатости) | вид ножки (код из таблицы вид ножки) | твердость (код из таблицы твердости) | ворсистость (код из таблицы вид ворсистости) | волокнистось (код из таблицы вид волокнистости) | и т.д., не забывайте, что объектов более 600 и полей у каждого до 10 миниумум. Что самое досадное - поля могут повториться как у Объекта3 и Объекта2 - поле твердость.

И это важно, основные запросы будут именно на выборку похожих элементов =((((((((((((
Добавлено @ 16:26
Цитата(igon @ 26.2.2006, 04:18)
Попробуй посмотреть в сторону отношения "многие-ко-многим".
Кроме таблиц "Объекты" и "Свойства" нужна будет еще одна - кроссировочная, с двумя полями, ID_Объекта и ID_Свойства.

Да, мне так подсказывали уже сделать.
Видимо это единственный верный вариант ?
PM MAIL   Вверх
buxNL
Дата 26.2.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Вот читаю http://www.helloworld.ru/texts/comp/other/oop/ch04.htm Буч Классификация

Существует ОБъектно Ориентированные БД ?
PM MAIL   Вверх
buxNL
Дата 26.2.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Люди :cry: , есть-ли опен аналог Caché http://www.intersystems.com/cache/index.html ???

Я понимаю - можно в реляционную модель при желании все что угодно загнать......

Но, вот что еще

Сaché enables rapid Web application development, extraordinary transaction processing speed, massive scalability, and real-time queries against transactional data - with minimal maintenance requirements.

И это очень... даже очень...

Это видимо, то - что доктор прописал.... но....
PM MAIL   Вверх
LSD
Дата 26.2.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(buxNL @ 26.2.2006, 16:44 Найти цитируемый пост)
Существует ОБъектно Ориентированные БД ?

Существуют, но не работал поэтому ничего про них не скажу.
Есть ORM (Object-Relational mapping) средства для обычных СУБД (только тот маппинг который они тебе предложат будет не лучше того что ты сделаешь сам).

У меня следующий вопрос, ты говорил, что признаков может быть очень много. И в тоже время в твоем примере:
Цитата
Id 0002 Объект2 | твердость (код из таблицы твердости) | ворсистость (код из таблицы вид ворсистости) | далее еще с десяток всяческих полей

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
buxNL
Дата 27.2.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Цитата

Есть ORM (Object-Relational mapping) средства для обычных СУБД (только тот маппинг который они тебе предложат будет не лучше того что ты сделаешь сам).

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


Цитата

У меня следующий вопрос, ты говорил, что признаков может быть очень много. И в тоже время в твоем примере:
Цитата
Id 0002 Объект2 | твердость (код из таблицы твердости) | ворсистость (код из таблицы вид ворсистости) | далее еще с десяток всяческих полей

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



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

Есть идея - свалить их в одну большую таблицу атрибутов,

ворсистость (точнее - код атрибута ворсистость) | повышенная
ворсистость (точнее - код атрибута ворсистость) | пониженная
ворсистость (точнее - код атрибута ворсистость) | нестандартная
ворсистость (точнее - код атрибута ворсистость) | bla-bla-bla-bla
ворсистость (точнее - код атрибута ворсистость) | bla-bla-bla-bla
ворсистость (точнее - код атрибута ворсистость) | bla-bla-bla-bla
твердость (точнее - код атрибута твердость) | мягкая
твердость (точнее - код атрибута твердость) | среднеяя
твердость (точнее - код атрибута твердость) | твердая
твердость (точнее - код атрибута твердость) | очень твердая
твердость (точнее - код атрибута твердость) | bla-bla-bla-bla
твердость (точнее - код атрибута твердость) | bla-bla-bla-bla
и.т.д.

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

Вот и все вместе будет выглядеть так:

Объект <-> кросс таблица <-> таблица атрибутов (пока ненормализованная)
В кросс таблице - соотвествие кода ID объекта к ID атрибутов и кокректное значение самого атрибута.

т.е. вот так
oбъект ID | атрибут ID | какое-то одно значение атрибута (код) из таблицы |

либо будет oбъект ID | атрибут ID + какое-то одно значение атрибута (код) из таблицы |
001 | 301255
где 001 ID oбъекта, 301 ID атрибута, 255 ID значения атрибута
но так не хочется, ибо нарушение всех правил и в дальнейшем будет геморой.

Это сообщение отредактировал(а) buxNL - 27.2.2006, 09:58
PM MAIL   Вверх
Akina
Дата 27.2.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Гм... я бы делал так:

Объекты (primary key = ID_O):
ID_O
прочие поля

Категории атрибутов (primary key = ID_K):
ID_K
Название категории
прочие поля

Атрибуты (primary key = ID_K + ID_A):
ID_A
ID_K
Содержание атрибута
прочие поля

Кросс-таблица (primary key = ID, indices ID_O (1), ID_K+ID_A (2)):
ID
ID_O
ID_K
ID_A




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
buxNL
Дата 27.2.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2006

Репутация: нет
Всего: нет



Стало-быть рекомендуешь привести к нормальному виду, ok!

Всем спасибо огромное, так и сделаю в итоге !!!!!


УРА smile !!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.