|
|
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
studentka_мне нужно реальную базу данных создать Что-то слабо верится, что практикантке в качестве задания предлагают за время практики написать систему управления предприятием. Что будет хранится в справочнике? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 18:25 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
> я практику на производстве прохожу Остается надеяться, что Ваша работа оплачивается достойно. ;) К сожалению, для практического применения Ваша схема малопригодна: - на Вашей схеме атрибуты каждого объекта уникальны; на самом деле это не так; - непонятен смысл декомпозиции атрибутов; если вдруг появится новый тип, Вы для него новую таблицу заведете? - нет возможности использовать перечисляемые значения (на автомобиль А1 может быть установлен только двигатель Д1 или Д2, а не двигатель вообще). Это то, что на поверхности. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 18:38 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
К сожалению, для практического применения Ваша схема малопригодна: Я бы сказал, что эта схема вообще не удобна, это схема по Тенцеру, и дает удобство только по вводу данных, обработка будет чрезвычайно затруднена. И если вернутся к теме и задаче автора топика, то при описанных критериях, абсолютно непригодна. Будут страшные тормоза, и огромные трудности по обработке данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 09:50 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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 коробка передач. Объясняющий мне, правда, не очень уверенно обьяснял, поэтому я надеюсь получить доступ к этой их базе с зап.частями и проверить это сама, но доступ получить у них тут-это долгий процесс. Вот что бы время не терять я решила положиться на обьясняющего и сделать модель на случай, что информация деиствительно достоверна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 11:08 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
> У меня уникальны ЗНАЧЕНИЯ аттрибутов (каждый аттрибут же имеет свои Attr_Id) Я не очень понимаю, что Вы хотели сказать этой фразой. Постарайтесь решить такую задачу: выбрать любой объект (в Вашей терминологии) с перечнем (не значениями!) его характеристик (включая те, значения которых не определены). Плюс к этому было бы правильно описать единицы измерения характеристик (а совсем хорошо было бы еще и использовать разные системы измерений). > Типы аттрибутов заранее известны ;)) ОК, если Вы настаиваете - пусть так. > Данные составляющих зап.частей мне нужно будет перекачать с уже имеющейся базы данных. Хм... на Вашем месте я бы уточнил задачу. Структура данных для хранения будет существенно отличаться от структуры данных для набора оператором. Вполне возможно, что для хранения (не для набора) Ваша схема вполне подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 13:35 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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; в итоге получу значения аттрибутов. Зачем мне хранить аттрибуты, значения которых не определены? Это необходимо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 15:52 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
таблицу забыла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 15:59 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 16:03 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
> в итоге получу значения аттрибутов. Со значениями понятно. Нужен просто полный перечень атрибутов любого объекта. > Зачем мне хранить аттрибуты, значения которых не определены? Их не нужно хранить. Нужно иметь схему описания сущности в явном виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 16:39 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
nnovКакой ужас!!! И это только выборка одного объекта с атрибутами А теперь как у Вас получиться выбрать Все объекты у которых Атрибут1 = Х или Атрибут2 = Y или Атрибут3 = Z Отсортировав по атрибуту4 Естественно только возможностями SQL тут не обойтись, такои запрос прийдеотся программным путеом "дорабатывать". Никто и не утверждал, что всё должно быть легко, требования не позволяют такой роскоши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 12:16 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 12:50 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 14:07 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 14:39 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
мод 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 15:38 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
studentka_ wrote: > я о том, что при такой схеме, как у меня ты не сделаешь в одном SQL > запросе такую выборку, которую описал nnov, и вряд ли ORDER BY применишь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 19:20 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
Сорри, забыл еще ограничения на value, нечто вроде Код: plaintext 1. 2. у меня в реальности просто несколько иначе, но смысл тот же.... -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 19:23 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
2 locky Отсутсвующие значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 10:39 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 11:39 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
автор3)Как мне обьяснили, у каждой зап.части/автомобиля есть свой однозначно характеризующий её номер. Т.е. автомобиля с конкретмным номером может быть только 1 мотор, только 1 коробка передач. вам не совсем корректно объяснили. Во-первых, называйте вещи своими именами. Мотор - это агрегат, запчасть - это деталь. Однозначно запчасть характеризуется навазнием производителя и ее номером - такая связка действительно уникальна. Модель может комплектоваться различными агрегатами. Например, есть Skoda Octavia, которая может комплектоваться моторами как бензиновыми, так и дизельными, с наддувом и без наддува, ну и объем тоже может быть разным. ИМХО, озвученная модель - это модель Тенцера. Она удобна для понимания и небольших объемах информации. При бОльших объемах инфы данная модель будет тормозить, и гибкость, которой обладает данная модель не будет иметь значение. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 21:43 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 10:06 |
|
||
|
Структура БД для хранения строк с переменным кол-вом полей
|
|||
|---|---|---|---|
|
#18+
ModelR wrote: > > Если хранить в базе пустые значения,существенная часть гибкости EAV не > используется, объем базы растет. Не проще ли тогда сразу отвести > параметрам колонки чем париться с EAV? Не проще. Я не собираюсь откзываться от прелестей EAV только потому, что вынужден дополнительно тратить 12 байт на аттрибут (заполненный или пустой). Тем паче, что поверх EAV значительно проще создаются всевозможные автоматические генераторы отчетности, документов, справочников и проч., чем поверх традиционной 3NF -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 14:35 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33563988&tid=1545391]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
381ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 652ms |

| 0 / 0 |
