|
|
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Добрый день! Вопрос новичка (да и может обсуждалось, не нашел): Что быстрее (лучше?) два join одной большой таблицы (as tab1 ... as tab2) или два join маленьких разных таблиц? Пример есть картотека, в ней шкафы с 2 полками(!!! только 2 и никак иначе), в которых могут находиться различные предметы. Запросы - берем шкаф и смотрим что и на какой полке лежит. Таблица ШКАФ - id,name Таблица ПРЕДМЕТ - id,name А вот дальше вопрос: можно сделать 2 таблицы ПОЛКА1 и ПОЛКА2 в каждой поля id, id_шкафа, id_предмета. И запрос делать так: Код: sql 1. 2. 3. 4. 5. Либо сделать одну таблицу ПОЛКА, но в ней указать ключ разделения, т.е. id, id_шкафа, id_предмета, KEY_ПОЛКА и тогда: Код: sql 1. 2. 3. 4. 5. Естественно во втором случае таблица ПОЛКА будет равняться (по кол-ву строк) сумме (ПОЛКА1 + ПОЛКА2) в первом варианте. Какой вариант лучше? Или может вообще лучше делать иначе? (но какой из этих вариантов лучше - все равно интересно) PS. Перемещения с полки на полку практически нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 20:02 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812, Нужны 2 таблицы - место хранения и объект хранения. Для выбора потребуется 1 жойн. Место хранения должно содержать и номер шкафа, и номер полки (лучше сквозной, т.е. уникальный) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 07:49 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Это если предметы уникальны. Если нет - потребуется связь многие со многими через промежуточную таблицу - объект на хранении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 08:43 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Три таблицы: Шкафы Полки Предметы Шкафы: id_шкафа(AI), ОписаниеШкафа Полки: id_полки(AI), ОписаниеПолки, id_шкафа Предметы: id_предмета(AI), ОписаниеПредмета, id_полки Нельзя ставить в одну таблицу Предметы id_полки и id_шкафа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 08:45 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 08:51 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
По моей схеме должно быть так: Шкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1,2,3,4; полка 2 содержит предметы 5,6,7,8; Шкаф 2 содержит полки 3 и 4; полка 3 содержит предметы 9,10,11,12; полка 2 содержит предметы 13,14,15,16; Кстати предметы на полках могут быть не уникальными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 08:58 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Таблица шкафов. Таблица полок, ссылающаяся на таблицу шкафов. Таблица предметов. Таблица соответствия предмет-полка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:51 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Возможно криво написал - таблица "предмет" - фактически справочник предметов. То есть там должны быть уникальные предметы. Но в шкафу эти предметы могут повторяться, и сочетаться в любых комбинациях. авторпотребуется связь многие со многими через промежуточную таблицу В качестве этой таблицы у меня выступает таблица "ПОЛКА" - она связывает место хранения "ШКАФ" и объект хранения "ПРЕДМЕТ". Объект "полка" фактически не существует - у него нет никаких свойств, только номер 1 или 2. авторТри таблицы: Шкафы Полки Предметы Шкафы: id_шкафа(AI), ОписаниеШкафа Полки: id_полки(AI), ОписаниеПолки, id_шкафа Предметы: id_предмета(AI), ОписаниеПредмета, id_полки У предметов много уникальных свойств и хранить их тысячами раз не хотелось бы - таблица "предметы" в это случае будет разбита на две - во вторую будут вынесены "ОписаниеПредмета" (которые уникальны), и опять получаем многие к многим... авторШкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1,2,3,4; полка 2 содержит предметы 5,6,7,8; Шкаф 2 содержит полки 3 и 4; полка 3 содержит предметы 9,10,11,12; полка 2 содержит предметы 13,14,15,16; Не совсем : Шкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1*100,2*50,3*20,4; полка 2 содержит предметы 1*50,2*1000,3*10,8; И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:54 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaТаблица шкафов. Таблица полок, ссылающаяся на таблицу шкафов. Таблица предметов. Таблица соответствия предмет-полка. Да, все так - только т.к. полок реально нет и они не нужны - это и есть таблица соответствия шкаф-предмет. Только нужно еще добавить 1 свойство (bool) в это соответствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:57 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812и они не нужны Если верить тому, что пишется выше - нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:18 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaЕсли верить тому, что пишется выше - нужны. Похоже я что-то туплю, и уже начинаю это чувствовать... Еще пару магических пенделей и... По другому - давайте заменим полку любым булевым определением - например цветом (белый или черный) есть справочник предметов id, prop есть таблица (справочник) шкафов - id, prop Нужна связывающая таблица - шкаф-предмет с доп свойством "цвет"... таблица ШП - id, id-шкафа, id-предмета, цвет. но join-а все равно 2 для выбора. В общем похоже не до конца понимаю "многое к многому", пошел читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:42 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
add: А еще - если мне надо получить таблицу с колонками: шкаф, черный предмет, белый предмет связывающую таблицу мне придется 2 раза подключать? И не будет ли лучше ее разбить на две (по цвету) и подключать две разные но маленькие вместо подключения двух раз одной большой. Или такую таблицу лучше формировать уже сторонними средствами, получая от базы простую "шкаф, предмет, цвет"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:59 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812предмет с доп свойством "цвет"то есть цвет - это атрибут предмета, и никак не связан ни со шкафом, ни с тем, в каком шкафу он лежит. Чую, ты доупрощался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 12:35 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Булевое значение - не годиться. Нужно оставить как я написал. Только из таблицы Предметы убрать id_полки авторТри таблицы: Шкафы Полки Предметы Шкафы: id_шкафа(AI), ОписаниеШкафа Полки: id_полки(AI), ОписаниеПолки, id_шкафа Предметы: id_предмета(AI), ОписаниеПредмета Нельзя ставить в одну таблицу Предметы id_полки и id_шкафа И добавить четвертую таблицу ТблПредметыНаПолках: id_пнп(AI), id_полки, id_предмета, КоличествоПредметовПокладенныхНаПолку Подозреваю КоличествоПредметовПокладенныхНаПолку будет у Вас всегда 1 или если Вы их туда кладете пачками, то более. Таблица ТблПредметыНаПолках будет иметь вид Код: plaintext 1. 2. 3. 4. 5. Запрос из первого поста ТС будет иметь вид Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 12:40 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Я правильно понял что булевое значение для определения IF (полка=верхняя) THEN bool=TRUE else bool=FALSE Да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 12:44 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Такс... Вы написали изначально, что полки есть и их 2. Теперь их нет. Если их нет, то таблицу Полки убираем. Таблица ПредметыНаПолках должна ссылаться на таблицу Шкафы. Три таблицы: Шкафы Полки Предметы Шкафы: id_шкафа(AI), ОписаниеШкафа ТблПредметыВШкафах: id_пнп(AI), id_шкафа, id_предмета, КоличествоПредметовПокладенныхВШкаф Предметы: id_предмета(AI), ОписаниеПредмета Таблица ТблПредметыВШкафах будет иметь вид Код: plaintext 1. 2. 3. 4. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 12:52 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
У меня ошибка Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 13:10 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
авторто есть цвет - это атрибут предмета, и никак не связан ни со шкафом, ни с тем, в каком шкафу он лежит. Чую, ты доупрощался... Я просто попытался пример подобрать похожий. Идея просто в том что связь многие со многими + атрибут, который не можно выделить отдельно. CosmagnettoЯ правильно понял что булевое значение для определения IF (полка=верхняя) THEN bool=TRUE else bool=FALSE Да? Да, можно и так. авторid_пнп(AI), id_шкафа, id_предмета, КоличествоПредметовПокладенныхНаПолку 1 1 2 2 Вот тут я усложнил (и больше запутал) пример написав о "кол-ве предметов" Вот еще пример: Таблица СЫР(на складе) Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. id_сыра, prop_сыра, страны экспорта, страны импорта Тогда связывающая таблица СЫР_СТРАНА будет Код: plaintext 1. 2. 3. 4. 5. А получить надо таблицу типа: Код: plaintext 1. 2. 3. 4. Я пишу запрос Код: sql 1. 2. 3. 4. 5. 6. Но чую что это какой-то индусский метод)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 14:21 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Мутно что-то... я так и не понял задачу. Из примера (результата) сформировать себе задачу и соответственно решение не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 14:32 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812Идея просто в том что связь многие со многими + атрибут, который не можно выделить отдельно. Это ЧЕЙ, ипона мать, атрибут? какой сущности атрибут, в такую таблицу и заколачивай. А у тебя атрибут одной сущности запихивается в таблицу, где хранятся экземпляры другой сущности - и чего, спрашивается, косяки прут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 14:50 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaЭто ЧЕЙ, ипона мать, атрибут? какой сущности атрибут, в такую таблицу и заколачивай. А у тебя атрибут одной сущности запихивается в таблицу, где хранятся экземпляры другой сущности - и чего, спрашивается, косяки прут? Это атрибут страны - то есть страна либо экспорта либо импорта. Можно "заколотить" его в справочник СТРАНЫ, но тогда этот справочник станет в 2 раза больше - то есть получиться что каждая строчка в нем будет дублироваться (до одного бул. значения). Так стоит делать? Но с точки зрения запроса это мало на что повлияет просто "and exp1.экспорт-импорт=1" перейдет в другой join. авторМутно что-то... я так и не понял задачу. Нужно получить таблицу всех значений СЫРОВ с колонками ЭКСПОРТ и ИМПОРТ, содержащими страны (для удобных сортировок, выборок). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:09 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812Но с точки зрения запроса это мало на что повлияет просто "and exp1.экспорт-импорт=1" перейдет в другой join. Нет, тут ошибся, повлияет - это условие совсем отвалится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:11 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
авторА в выборке нужно в 95% случаев получать таблицу вида: id_сыра, prop_сыра, страны экспорта, страны импорта Тогда связывающая таблица СЫР_СТРАНА будет Как это в 95% случаев? Селекты работают в 100% случаев и выдают выборки на 100% соответствующие заданным значениям. Я когда про задачу спрашивал, я ожидал услышать это: Сделать выборку пар стран, которые продают друг другу сыры с указанием типа сыра То есть рус продает гер сыр 1 гер продает рус сыр 2 рус продает ита сыр 1 гер продает ита сыр 3 Я правильно угадал задание? )))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:21 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
CosmagnettoКак это в 95% случаев? Селекты работают в 100% случаев и выдают выборки на 100% соответствующие заданным значениям. Это я про то что это будет основным запросом. То есть понятно что будет и другая работа с таблицей, но основная именно эта. CosmagnettoТо есть рус продает гер сыр 1 гер продает рус сыр 2 рус продает ита сыр 1 гер продает ита сыр 3 Я правильно угадал задание? )))))))))))) Да, только еще в этой таблице должны быть сыры без стран экспорта и/или импорта например строка "пусто" продает "пусто" сыр 4 То есть мы должны понимать что сыр есть, но стран у него нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:30 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=87&tid=1831194]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
20ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 373ms |

| 0 / 0 |
