powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура БД для хранения строк с переменным кол-вом полей
21 сообщений из 71, страница 3 из 3
Структура БД для хранения строк с переменным кол-вом полей
    #33562951
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studentka_мне нужно реальную базу данных создать
Что-то слабо верится, что практикантке в качестве задания предлагают за время практики написать систему управления предприятием.

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

Остается надеяться, что Ваша работа оплачивается достойно. ;)

К сожалению, для практического применения Ваша схема малопригодна:
- на Вашей схеме атрибуты каждого объекта уникальны; на самом деле это не так;
- непонятен смысл декомпозиции атрибутов; если вдруг появится новый тип, Вы для него новую таблицу заведете?
- нет возможности использовать перечисляемые значения (на автомобиль А1 может быть установлен только двигатель Д1 или Д2, а не двигатель вообще).

Это то, что на поверхности. ;)
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563396
nnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, для практического применения Ваша схема малопригодна:


Я бы сказал, что эта схема вообще не удобна, это схема по Тенцеру,
и дает удобство только по вводу данных, обработка будет чрезвычайно затруднена. И если вернутся к теме и задаче автора топика, то при
описанных критериях, абсолютно непригодна.
Будут страшные тормоза, и огромные трудности по обработке данных.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563479
studentka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621
Остается надеяться, что Ваша работа оплачивается достойно. ;)


платить они достойно стали бы специалисту :) Я же довольна, что
получила возможность на реальном примере поучиться.Только вот сложнее получается, чем я себе представляла.

guest_20040621

К сожалению, для практического применения Ваша схема малопригодна:
- на Вашей схеме атрибуты каждого объекта уникальны; на самом деле это не так;
- непонятен смысл декомпозиции атрибутов; если вдруг появится новый тип, Вы для него новую таблицу заведете?
- нет возможности использовать перечисляемые значения (на автомобиль А1 может быть установлен только двигатель Д1 или Д2, а не двигатель вообще).

Это то, что на поверхности. ;)


Спасибо огромное за критику!

1) У меня уникальны ЗНАЧЕНИЯ аттрибутов(каждый аттрибут же имеет свои Attr_Id), т.е., например, у меня часто будут повторяться такие значения аттрибутов, как, "Rigidity" (для каждой скорости каждой коробки передач будет такое значение встречаться), так вот что бы мне не дублировать эту текстовую строку по 100 раз, я перед вставкой нового аттрибута- сначала проверю, а нет ли у меня уже такого значения, и если есть - то выберу Value_Id этого аттрибута и помещу к нововведённому Attr_Id.

2) Типы аттрибутов заранее известны: аттрибуты могут быть только указанных типов: Integer, Double, Varchar. И соответственно для хранения значений этих типов будут соответствующие таблицы.

Таблица же "Type" имеет вид:
----------------
Id | Name
-----------------
1 | Integer
2 | Double
3 | Varchar

Идея та же - что бы для каждого типа не дублировать текстовую строку, а только лишь Integer(Id), за это прийдётся, конечно, лишний join "заплатить". Стоит ли Type в отдельную таблицу выводить, или лучше сразу прописать название типа аттрибута в таблиcу Attributes?

3) Я тоже долго пыталась разобраться в этом. Данные составляющих зап.частей мне нужно будет перекачать с уже имеющейся базы данных. Как мне обьяснили, у каждой зап.части/автомобиля есть свой однозначно характеризующий её номер. Т.е. автомобиля с конкретмным номером может быть только 1 мотор, только 1 коробка передач. Объясняющий мне, правда, не очень уверенно обьяснял, поэтому я надеюсь получить доступ к этой их базе с зап.частями и проверить это сама, но доступ получить у них тут-это долгий процесс. Вот что бы время не терять я решила положиться на обьясняющего и сделать модель на случай, что информация деиствительно достоверна.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563720
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> У меня уникальны ЗНАЧЕНИЯ аттрибутов (каждый аттрибут же имеет свои Attr_Id)

Я не очень понимаю, что Вы хотели сказать этой фразой. Постарайтесь решить такую задачу: выбрать любой объект (в Вашей терминологии) с перечнем (не значениями!) его характеристик (включая те, значения которых не определены). Плюс к этому было бы правильно описать единицы измерения характеристик (а совсем хорошо было бы еще и использовать разные системы измерений).

> Типы аттрибутов заранее известны

;)) ОК, если Вы настаиваете - пусть так.

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

Хм... на Вашем месте я бы уточнил задачу. Структура данных для хранения будет существенно отличаться от структуры данных для набора оператором. Вполне возможно, что для хранения (не для набора) Ваша схема вполне подойдет.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563924
studentka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> У меня уникальны ЗНАЧЕНИЯ аттрибутов (каждый аттрибут же имеет свои Attr_Id)

Я не очень понимаю, что Вы хотели сказать этой фразой. Постарайтесь решить такую задачу: выбрать любой объект (в Вашей терминологии) с перечнем (не значениями!) его характеристик (включая те, значения которых не определены). Плюс к этому было бы правильно описать единицы измерения характеристик (а совсем хорошо было бы еще и использовать разные системы измерений).


SELECT A.Attr_Id, A.Value_Id, Ti.Name, Ty.Name, A.Line_Number,
FROM Object O, Object_Attributes OA, Attributes A, Title Ti, Type Ty
WHERE O.Object_Id=OA.Object_Id
AND OA.Attr_Id=A.Attr_Id
AND A.Title_Id=Ti.Title_Id
AND A.Type_Id=Ty.Type_Id
AND O.Name=’коробка предач А’;

в итоге таблица результатов будет выглядеть как в прикреплённом рисунке. Дальше я буду проходить по каждой строчке результатов и для каждого Аттр_Ид делать запрос:

SELECT Value from Ty.Name
WHERE Ty.NameValue_Id=Value_Id;

в итоге получу значения аттрибутов. Зачем мне хранить аттрибуты, значения которых не определены? Это необходимо?
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563937
studentka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таблицу забыла
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563942
nnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studentka_
SELECT A.Attr_Id, A.Value_Id, Ti.Name, Ty.Name, A.Line_Number,
FROM Object O, Object_Attributes OA, Attributes A, Title Ti, Type Ty
WHERE O.Object_Id=OA.Object_Id
AND OA.Attr_Id=A.Attr_Id
AND A.Title_Id=Ti.Title_Id
AND A.Type_Id=Ty.Type_Id
AND O.Name=’коробка предач А’;

в итоге таблица результатов будет выглядеть как в прикреплённом рисунке. Дальше я буду проходить по каждой строчке результатов и для каждого Аттр_Ид делать запрос:

SELECT Value from Ty.Name
WHERE Ty.NameValue_Id=Value_Id;

в итоге получу значения аттрибутов. Зачем мне хранить аттрибуты, значения которых не определены? Это необходимо?
Какой ужас!!!
И это только выборка одного объекта с атрибутами
А теперь как у Вас получиться выбрать Все объекты у которых
Атрибут1 = Х или Атрибут2 = Y или Атрибут3 = Z
Отсортировав по атрибуту4
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33563988
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> в итоге получу значения аттрибутов.

Со значениями понятно. Нужен просто полный перечень атрибутов любого объекта.

> Зачем мне хранить аттрибуты, значения которых не определены?

Их не нужно хранить. Нужно иметь схему описания сущности в явном виде.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33570299
studentka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nnovКакой ужас!!!
И это только выборка одного объекта с атрибутами
А теперь как у Вас получиться выбрать Все объекты у которых
Атрибут1 = Х или Атрибут2 = Y или Атрибут3 = Z
Отсортировав по атрибуту4

Естественно только возможностями SQL тут не обойтись, такои запрос прийдеотся программным путеом "дорабатывать". Никто и не утверждал, что всё должно быть легко, требования не позволяют такой роскоши.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33570449
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studentka_ wrote:
> nnov
> Какой ужас!!!
> И это только выборка одного объекта с атрибутами
> А теперь как у Вас получиться выбрать Все объекты у которых
> Атрибут1 = Х или Атрибут2 = Y или Атрибут3 = Z
> Отсортировав по атрибуту4
>
>
>
> Естественно только возможностями SQL тут не обойтись, такои запрос
> прийдеотся программным путеом "дорабатывать". Никто и не утверждал, что
> всё должно быть легко, требования не позволяют такой роскоши.
Ва первых! Ужас где? в 4-х джойнах? а Вы больше чем к одному не
привыкли? Ваши проблемы...
Ва втарых... что значит "только SQL тут не обойтись, прийдется
программным путем дорабатывать". А сейчас как решается - аппаратно? или
у нас СКЛ - дух святой? или в скл отменили Order by?
или нынче кошерно на клиенте сортировать? или я чего не понял?


--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33570783
studentka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33570934
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studentka_я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь.
select
atr(obj_type,obj_id,'atr1'),atr(obj_type,obj_id,'atr2'),atr(obj_type,obj_id,'atr3') ....
from obj_table
where obj_type='personal' and atr(obj_type,obj_id,'atr1')='Иванов'
order by atr(obj_type,obj_id,'atr2')

где atr(obj_id,atr_name) - функция возвращающая значение атрибута типа obj_type с именем atr_name объекта obj_id
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33571185
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод studentka_я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь.
где atr(obj_id,atr_name) - функция возвращающая значение атрибута типа Чисто SQL разворот в колонки для EAV например для трех заданных атрибутов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
CREATE TABLE EAV_Entity(
  EntId   NUMBER( 17 , 0 ) NOT NULL PRIMARY KEY,
  EntNum  NUMBER( 17 , 0 ) NULL,
  EntDescr VARCHAR2( 100 ) NULL
);
/
CREATE TABLE EAV_Attribute(
  AttrId   NUMBER( 17 , 0 ) NOT NULL PRIMARY KEY,
  AttrNum  NUMBER( 17 , 0 ) NULL,
  AttrDescr VARCHAR2( 100 ) NULL
);
/
CREATE TABLE EAV_Value(
  EntId   NUMBER( 17 , 0 ) NOT NULL ,
  AttrId   NUMBER( 17 , 0 ) NOT NULL,
  Val VARCHAR2( 100 ) NULL
);

select 
  EntId, EntDescr, prop1, prop2, prop3
from
    (select
      e.EntId, e.EntDescr,
      min(case when z.AttrId =   7  then z.val else null end) prop1,
      min(case when z.AttrId =  12  then z.val else null end) prop2,
      min(case when z.AttrId =  17  then z.val else null end) prop3
    from
      EAV_Entity e, EAV_Value z
    where
      e.EntId  = z.EntId
      and z.attrid in ( 7 , 12 , 17 )
    group by
      e.EntId, e.EntDescr )
where
   prop1 >  70000   AND  prop2 < 80000 
;
Пример конечно скелетный, обсуждалось на ORACLE более подробно.
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33571953
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studentka_ wrote:
> я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL
> запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select E.ID,V1.ValueChar as Name
	,V2.ValueInt as Position
	,V4.ValueDate as date
	,V4.ValueDate as ArrivalDate
...................
	,VN.ValueXXX as XXXname

from	dbo.Element E join dbo.Value V1 on E.ID = V1.Element
	join dbo.value V2 on E.ID = v2.Element
	join dbo.value V3 on E.ID = v3.Element
	join dbo.value V4 on E.ID = v4.Element
  .............................
	join dbo.value VN on E.ID = vN.Element
where	E.type = 'Cars'
order by V2.ValueInt,V5.Valuedate,...............
	

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33571955
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, забыл еще ограничения на value, нечто вроде
Код: plaintext
1.
2.
..........
where	E.type = 'Cars' and V1.Parameter =  16  and V2.Parameter= 38  ...

у меня в реальности просто несколько иначе, но смысл тот же....
--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33572757
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 locky
Отсутсвующие значения?
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33573035
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR wrote:
> 2 locky
> Отсутсвующие значения?
Что - отсутствующие значения? Values в которых значения ValueInt etc - null?
В моем случае - я таки храню их в базе - технологически удобно.
Если не хранить - заменяем inner join на left outer join - но можем
неслабо потерять в скорости (не в этом случае, правда, но всё таки...)

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33575314
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор3)Как мне обьяснили, у каждой зап.части/автомобиля есть свой однозначно характеризующий её номер. Т.е. автомобиля с конкретмным номером может быть только 1 мотор, только 1 коробка передач.

вам не совсем корректно объяснили. Во-первых, называйте вещи своими именами. Мотор - это агрегат, запчасть - это деталь. Однозначно запчасть характеризуется навазнием производителя и ее номером - такая связка действительно уникальна. Модель может комплектоваться различными агрегатами. Например, есть Skoda Octavia, которая может комплектоваться моторами как бензиновыми, так и дизельными, с наддувом и без наддува, ну и объем тоже может быть разным.

ИМХО, озвученная модель - это модель Тенцера. Она удобна для понимания и небольших объемах информации. При бОльших объемах инфы данная модель будет тормозить, и гибкость, которой обладает данная модель не будет иметь значение.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33575830
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky
ModelR wrote:
> 2 locky
> Отсутсвующие значения?
Что - отсутствующие значения? Values в которых значения ValueInt etc - null?
В моем случае - я таки храню их в базе - технологически удобно.
Если не хранить - заменяем inner join на left outer join - но можем
неслабо потерять в скорости (не в этом случае, правда, но всё таки...)

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
Если хранить в базе пустые значения,существенная часть гибкости EAV не используется, объем базы растет. Не проще ли тогда сразу отвести параметрам колонки чем париться с EAV?
...
Рейтинг: 0 / 0
Структура БД для хранения строк с переменным кол-вом полей
    #33577115
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR wrote:
>
> Если хранить в базе пустые значения,существенная часть гибкости EAV не
> используется, объем базы растет. Не проще ли тогда сразу отвести
> параметрам колонки чем париться с EAV?
Не проще. Я не собираюсь откзываться от прелестей EAV только потому, что
вынужден дополнительно тратить 12 байт на аттрибут (заполненный или пустой).
Тем паче, что поверх EAV значительно проще создаются всевозможные
автоматические генераторы отчетности, документов, справочников и проч.,
чем поверх традиционной 3NF


--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21 сообщений из 71, страница 3 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура БД для хранения строк с переменным кол-вом полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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