|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
АнатоЛойregisterersКстати, если это не костыль, то напишите JOIN-запрос для такого кейса))) Что именно хотите видеть в результатах? И допишите реальные реквизиты у таблиц... Дано: таблица супер-типа и множество таблиц под-типов (например, видов товаров) Требуется: вывести все записи из таблицы супер-типа с заджоиненным произвольным полем (например, именем) из каждой таблицы под-типа Я понимаю, что запрос должен быть чем то вроде этого: Код: sql 1. 2. 3. 4. 5.
Но ведь вопрос в том, что нужно заранее знать, какие типы под-типы существуют, а реляционная теория не позволяет абстрагировать эту задачу на произвольные наборы под-типов. Вот если бы существовал условный механизм объединения подобный таковому в случае слияния, что-то вроде "UNION ON" тогда другой вопрос. А так, выглядит, что реляционная теория неполна. P.S. Надеюсь на конструктивный диалог, в отличие от некоторых товарищей, комментировавших выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 01:34 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersMasterZivпропущено... Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие отвечающие. Вопрос исчерпан, тему можно закрывать. Есть другие вопросы -- задавай отдельно. Тогда надо определиться в терминологии, что называть наследованием в данном случае. К тому же, как быть в ситуации, когда одинаково названы поля в родительской и дочерней таблицах? А вообще, да, смотрю оффтоп потёк ручьём... По поводу главной темы топика, благодарю всех, что помогли уточнить суть вопроса, а именно - то, что в реляционной теории не существует способа ограничить возможность ссылаться двум и более дочерним сущностям на одну родительскую. И только родительская определяет свою принадлежность к той или иной дочерней сущности, тогда как все остальные, на нее ссылающиеся - мусорные. Введение дискриминатора в состав ключа, как предлагал известный персонаж из Простоквашино в посте 20787976 ещё более костыльное решение, нигде такого не встречал... В общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение. З.Ы. А по логике корзины - целесообразно создать отдельный топик, тема довольно интересная, но здесь это оффтоп. ты фантазёр, однако... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 06:10 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
skyANAMasterZivпропущено... в виде связи 1-к-0..1 между 2-мя таблицами И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность. родитель один у , скажем двух классов. его связь с каждой из дочерних таблиц один к ноль или один, потому что записей в обоих дочерних классах может не быть , т.е. в каждом наследнике запись либо она, либо её нет вообше. поэтому и 1:0..1 , а не "бывает так и эдак" . ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 06:17 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersАнатоЛойпропущено... Что именно хотите видеть в результатах? И допишите реальные реквизиты у таблиц... Дано: таблица супер-типа и множество таблиц под-типов (например, видов товаров) Требуется: вывести все записи из таблицы супер-типа с заджоиненным произвольным полем (например, именем) из каждой таблицы под-типа Я понимаю, что запрос должен быть чем то вроде этого: Код: sql 1. 2. 3. 4. 5.
Но ведь вопрос в том, что нужно заранее знать, какие типы под-типы существуют, а реляционная теория не позволяет абстрагировать эту задачу на произвольные наборы под-типов. Вот если бы существовал условный механизм объединения подобный таковому в случае слияния, что-то вроде "UNION ON" тогда другой вопрос. А так, выглядит, что реляционная теория неполна. P.S. Надеюсь на конструктивный диалог, в отличие от некоторых товарищей, комментировавших выше. Чё там не скачаешь ты фишку нигде ниразу... дело в том, что тебе не нужно знать все подтипы, а поле это общее должно быть в базовом классе. да и запрос у тебя неправильный. мне кажется уже в психологии у тебя проблемым ты просто не хочешь понимать то, что видимо понять способен. и этот ментальный барьер только тебе и мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 06:30 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
MasterZiv, скачаешь/сечёшь ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 06:31 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
MasterZivskyANAпропущено... И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность. родитель один у , скажем двух классов. его связь с каждой из дочерних таблиц один к ноль или один, потому что записей в обоих дочерних классах может не быть , т.е. в каждом наследнике запись либо она, либо её нет вообше. поэтому и 1:0..1 , а не "бывает так и эдак" . В примере выше не бывает записи только в таблице fin.Document, то есть не бывает ситуации "либо её нет вообше". Понимаете? Назовём это "наследование от абстрактного класса" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 07:15 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
я вообще уже запутался, что за "супер-типы" начались? кто это? registerersСуть проблемы можно пояснить на примере того же банального интернет-магазина. Есть множество таблиц разных товаров, потому что набор свойств (атрибутов) у них разный. Например, булка хлеба и како-нибудь девайс. Вопрос - как положить в корзину и то, и другое, и пятое-десятое? Самое простое, что приходит в голову - это в таблице корзины выделить одно поле под айди товара, а другое - под ... (барабанная дробь) ... НАЗВАНИЕ ТАБЛИЦЫ, к которой относится этот айдишник. Но это же костыль-костыльный... Потому что никаких реляционных связей тут не построишь. у "банального интернет-магазина" нет проблем. "Банально" там достаточно знать все ID, которые встречаются, выполнить 1 IN-query и вытащить карту соответствий, которой потом и пользоваться при выводе. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 12:35 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
забыл добавить, что у вас он НЕ банальный, отсюда и все беды ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 12:49 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
tip78забыл добавить, что у вас он НЕ банальный, отсюда и все беды Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 13:13 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Да уж, я смотрю, тут собрались почти одни снобы и тролли, которым нечего сказать по сути кроме демагогии и переходов на личность собеседника. Надеюсь, что найдётся хоть один адекватный спец в реляционке, который понимает суть проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 15:26 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerers, да суть то простая нельзя указать форинкей к вью потому приходится делать промежуточную таблицу (Union всех ID всех таблиц) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 15:52 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
ViPRosregisterers, да суть то простая нельзя указать форинкей к вью потому приходится делать промежуточную таблицу (Union всех ID всех таблиц) та не, вьюхи тут не при чём это скорее вопрос о монопольном владении внешним ключом (похоже на рэпчину)) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 16:02 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
skyANAtip78забыл добавить, что у вас он НЕ банальный, отсюда и все беды Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :) какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине. не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их. jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 16:17 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
tip78skyANAпропущено... Ну он же чёрным по белому написал в первом посте: "Вот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных" :) какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине. не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их. jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет. Магазины появились ещё до jsonb и проблем с добавлением товара в корзину у них нет. Автор таки теоритизирует :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 17:15 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
skyANAtip78пропущено... какой же он теоретический? "наполнить корзину", это самый обязательный вопрос в любом магазине. не надо было под каждый вид товара создавать отдельную таблицу с его свойствами. Тысячи их. jsonb добавьте в order_products и зафиксируйте все выбранные свойства. Нельзя там IDы свойств держать, свойства ведь могут и исчезнуть через X лет. Магазины появились ещё до jsonb и проблем с добавлением товара в корзину у них нет. Автор таки теоритизирует :) Конечно, теоретизирую, я с самого начала говорил, что меня интересует исключительно теория. Я в своей практике рефакторил достаточно разных систем и насмотрелся разного. Проблем с добавлением в корзину нет, но решаются они костыльным способом. Об этом идёт речь. Только введение ограничения монопольного владения внешним ключом могло бы решить проблему. Но, наверное, это будет не в этой Вселенной... Хотя, написать чувакам из рабочей группы ISO/IEC, наверное стоит)) Возможно там будет дискуссия более продуктивная, чем здесь))) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2017, 21:52 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersВот есть такой теоретический вопрос о реляционных связях между гетерогенными структурами данных. Матюк страшный, но на самом деле всё просто и такая проблема довольно часто возникает на практике, например в интернет-магазинах, всевозможных CRM-системах и не только. Суть проблемы можно пояснить на примере того же банального интернет-магазина. Есть множество таблиц разных товаров, потому что набор свойств (атрибутов) у них разный. Например, булка хлеба и како-нибудь девайс. Вопрос - как положить в корзину и то, и другое, и пятое-десятое? Самое простое, что приходит в голову - это в таблице корзины выделить одно поле под айди товара, а другое - под ... (барабанная дробь) ... НАЗВАНИЕ ТАБЛИЦЫ, к которой относится этот айдишник. Но это же костыль-костыльный... Потому что никаких реляционных связей тут не построишь. Мне в голову приходит только два типичных решения - это либо использования паттерна EAV (entity, attribute, value), либо все уникальные атрибуты каждого из видов товара держать в поле с особым типом данных - JSON/JSONB, как в БД PostgreSQL. Тогда, естесственно, сущность (таблица) будет одна и её можно спокойно класть в корзину. Так вот интересно, существуют ли какие то более элегантные решения этой проблемы? Сначала, все-таки, нужно ответить себе на вопрос: а почему не все товары в одной таблице?:) Что в этом плохого, конкретно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2017, 21:11 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
ViPRosregisterers, да суть то простая нельзя указать форинкей к вью потому приходится делать промежуточную таблицу (Union всех ID всех таблиц) ))) Во-первых, Вы находитесь в разделе "Проектирование баз данных", а не "Проектирование реляционных баз данных". Во-вторых, для РМД еще не удалось найти ни одной практической задачи, то есть, ее практическая ценность равна нулю. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2017, 21:21 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Бредятина, Это-же Ваш человек! Вы - отрицаете реляционные БД, ТС - сомневается в них. Ему ещё один шаг, и вас тут на форуме будет двое. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2017, 18:15 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
zeon11Бредятина, Это-же Ваш человек! Вы - отрицаете реляционные БД, ТС - сомневается в них. Ему ещё один шаг, и вас тут на форуме будет двое. Я ничего не отрицаю, всегда сомневаюсь, и никогда свое мнение не высказываю:) Мнение может обидеть какого-нибудь (совсем не знакомого) человека:) Факты, конечно, тоже могут обидеть, но это уже проблема обиженного. Как правило:) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2017, 14:36 |
|
|
start [/forum/topic.php?fid=32&msg=39524986&tid=1540132]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 379ms |
0 / 0 |