задачка по базам данных для отцов
where link.type == mytype
join object
where object.linkId == link.id
join бысто работает
Как делать центральшую таблицу, (лин, объект) или (линк, объект1, объект2 надо смотреть подробнее ситуацию
Похоже что в этом случае с каждым объектом связано ограниченное число linkов...
Почитать - классика, Коннолли - Берг. Они советуют эту связь просто ещё одной таблицей разруливать.
два селекта из линков(по первой связи и по второй) работают быстрее, чем один селект из объектов с приджойненными линками(ну вот такая немеряная база, объектов там на порядок больше, чем линков)
но делать два почти одинаковых селекта - это как-то некрасиво, хочется все сделать за один запрос и при том быстро...
да,
select obj1, obj2 from link
where link.type == mytype
тоже не покатит, это все делается под хибернейтом , то есть для такого придется еще один класс заводить... в общем, так не катит
а может ты просто индексы забыл грамотно построить?
Нормальное человеческое решение - это объединение. Если объединение типа table1.integer_type = table2.integer_type работает медленно (не зависимо от размера базы то у вас в консерватории что-то не так. Либо поля по которым делается объединение не integer (тогда вы отморозки либо по этим полям не построены индексы, либо БД по какой-то причине индексы не использует. Какая БД кстати?
поля ксати не integer а long - по-оракловски number, это плохо? или под "не integer" имелось в виду че-нить типа string?
а вообще, спасибо, я просил именно "нормального человеческого решения", и если оно такое - не буду больше заморачиваться
Сегодня я узнал, что любые числовые данные Oracle хранит в виде строк с десятичными цифрами. Вот так то...
SQL> create table test(c_number number)
2 /
Таблица создана.
SQL> insert into test(c_number)
2 values(1/10)
3 /
1 строка создана.
SQL> insert into test(c_number)
2 values(1)
3 /
1 строка создана.
SQL> insert into test(c_number)
2 values(12345678.90)
3 /
1 строка создана.
SQL> insert into test(c_number)
2 values(null)
3 /
1 строка создана.
SQL> insert into test(c_number)
2 values(0)
3 /
1 строка создана.
SQL> commit
2 /
Фиксация обновлений завершена.
SQL> select c_number, dump(c_number, 16)
2 from test
3 /
C_NUMBER DUMP(C_NUMBER,16)
----------------------------------------------------------
,1 Typ=2 Len=2: c0,b
1 Typ=2 Len=2: c1,2
12345678,9 Typ=2 Len=6: c4,d,23,39,4f,5b
NULL
0 Typ=2 Len=1: 80
SQL> select chr(80)
2 from dual
3 /
C
-
P
Последний запрос -это чтобы показать, что - это не '0'
Да, мы сегодня поигрались с dump и пришли к выводу, что числовые данные хранятся не в строковом виде конечно же, но в десятичном.
Оставить комментарий
voronetskaya
есть две сущности - object и link.link связывает 2 objectа.
link имеет атрибуты
object имеет скока угодно линков.
то есть типичная связь many-to-many.
надо это на реляционную бд отобразить.
чего хочется. чтобы при выборе всех objectов учавствующих в linkах нужного типа не приходилось делать два селекта - для первого объекта в связи и для второго.
джойнить объекты с линками без мазы, база просто немеряных размеров, это долго.
то же самое для поиска объектов связанных с данными.
в общем хочется полезных советов, как это дело разрулить красиво и правильно.
Ссылки на почитать что-то приветствуются