Форум сайта python.su
py.user.nextМожно было ещё упомянуть что отношения бывают четырёх видов. Отношение “один к одному” можно представить как просто запись в таблице. Отношения “один ко многим” или “многие к одному” требуют, как минимум, двух таблиц, связанных внешними ключами. Отношение “многие ко многим” приходится приводить к предыдущим двум видам с помощью дополнительной стыковочной таблицы.
Реляционная база данных - это база данных, состоящая из отношений.
py.user.nextНе представляю, как можно работать с беспорядочными данными. Надо наводить порядок! Например, с помощью первичного ключа. Как правило, первичный ключ отражает хронологию добавления записей. Или можно упорядочить данные с помощью запроса ORDER BY column. У нас есть возможность самим определить какую запись считать первой, а какую - последней.
Так как множество - не упорядоченная структура, то в нём нет первого кортежа или последнего кортежа.
py.user.nextТаблица со строками - это удобное визуальное представление данных в БД. Видимо, поэтому слова table, column, row повсеместно используются для описания структуры БД и синтаксиса SQL. Хотя бы для облегчения понимания.
Это не таблица со строками, это множество с кортежами. Там не может быть секций
Офлайн
> Можно было ещё упомянуть что отношения бывают четырёх видов
Это не отношения, а связи.
> Не представляю, как можно работать с беспорядочными данными
py.user.next любит выёживаться, но сам плохо знает теорию. Например его цитата про множества говорит о том что он не понимает различий между реляционной алгеброй и SQL-ом.
Вот почитай учебник по основам теории, там всё хорошо написано: https://postgrespro.ru/education/books/dbtech
> И Вы, и Rodegast, единогласно предложили мне использовать для логического разбиения таблицы на “секции” составной ключ
Я такого не предлагал. Никакие таблицы на секции ре разбиваются, для решения твоей задачи нужно использовать составной индекс. Ключом он не является.
Офлайн
Rodegast
Это не отношения, а связи.
RodegastПрошу прощения, запутался в нюансах.
составной индекс. Ключом он не является.
Офлайн
Alex.Pro.Вот об этом я тебе и говорю, что ты не знаешь значения слова “реляционная”.
Можно было ещё упомянуть что отношения бывают четырёх видов. Отношение “один к одному” можно представить как просто запись в таблице. Отношения “один ко многим” или “многие к одному” требуют, как минимум, двух таблиц, связанных внешними ключами. Отношение “многие ко многим” приходится приводить к предыдущим двум видам с помощью дополнительной стыковочной таблицы.
Rodegastwiki. отношение
py.user.next любит выёживаться, но сам плохо знает теорию. Например его цитата про множества говорит о том что он не понимает различий между реляционной алгеброй и SQL-ом.
RodegastВот там полезная фраза
Вот почитай учебник по основам теории
Реляционная модель появилась в начале 1970-х гг. в работахВот их работы надо читать. Но для этого надо знать английский, иначе придётся читать перепечатывальщиков, которые вот чужую теорию где-то собирают и потом в своих книжках за свою выдают, якобы это их труды, и для этого маскируя это всё за пересказами кусков этой теории своими словами. И переводы тоже бывают не очень качественными, поэтому на английском может быть написано всё ясно, просто и понятно, а перевод того же самого может быть якобы правдивым и правильно переведённым даже, но при этом о-о-о-очень запутанным. Я таких переводов много встречал, начиная от описания Scrum'а, заканчивая объектно-ориентированными теориями, где просто по-русски написана какая-то сложная и несогласующаяся обтекаемая ерунда, а по-английски всё просто и понятно и однозначно.
Э. Кодда (Edgar Codd) и ряда других исследователей. Большую роль в популяри-
зации идей реляционной модели данных сыграли работы К. Дейта (Christopher
Date).
RodegastТак у тебя с английским проблема, это твой барьер, который тебя держит с шорами на глазах. А у меня этого барьера нет, я могу побежать налево, могу побежать направо. Когда ты читаешь одну книжку, переведённую три года назад (и это свежак), я в это время читаю три книжки, которые и переведены, и не переведены. Поэтому я узнаю с разных сторон одно и то же, я как бы смотрю на слона с позиций всех трёх слепцов, стоящих с разных сторон от него.
py.user.next любит выёживаться
Alex.Pro.Не, ничего подобного. Это у тебя тоже заблуждение. Ты думаешь, что первичный ключ - это id в числовом виде, но первичный ключ иногда может быть id в числовом виде, а может быть и Таня-Наташа в контексте того, кто там водку покупал, а кто коньяк. И там может не быть поля id вообще, оно вообще может ещё и мешать к тому же.
Как правило, первичный ключ отражает хронологию добавления записей.
Отредактировано py.user.next (Дек. 19, 2024 07:12:05)
Офлайн
> Давно поглядываю в сторону Постгреса. Но, для начала, тренируюсь на “кошках” попроще
Книжка не про postgresql, а про теорию. Во всяком случае первую часть стоит прочесть + посмотри видео.
> wiki. отношение .. Так что SQL'а там или какой-то СУБД … Так у тебя с английским проблема, это твой барье
Ой как чебурашку бомбанула! Ещё раз для тебя повторяю. SQL и реляционная алгебра описывают разные модели данных с разной терминологией. Ну а твоё выё… меня просто веселит, а вот Alex из за него запутывается. По этому лучше молчи в тряпочку, за то за умного не сойдешь
Офлайн
Alex.Pro.Поправьте если неправильно рассуждаю.
Пока у нас в таблице дома с одной улицы - их номера уникальны. А если у нас больше одной улицы - номера домов на разных улицах могут повторятся.
Офлайн
xam1816Ну… Примерно так у меня и получается. Так, да не так. Таблица “Номера” сразу оказывается лишней. Из-за того, что мне надо отображать данные целого списка домов, номер дома мне удобнее хранить не в стыковочной таблице “Адреса”, а в таблице “Дома”. В таблице “Дома” собраны данные домов с разных улиц, поэтому номер дома сам по себе теряет уникальность. Уникальность обеспечивается комбинацией адреса с номером дома.
У одного номера может быть много разных улиц.
У одной улицы может быть много разных номеров
Офлайн
Alex.Pro.Уникальность дома обеспечивается его Id в таблице, почему нужно определять его уникальность улицей и номером дома? В разных городах может быть дом с адресом Ленина 20 например. Тогда нужно связку: город, улица ,дом. Так и города есть одинаковыми названиями. В чем уникальность тогда?
Уникальность обеспечивается комбинацией адреса с номером дома.
Офлайн
> У одного номера может быть много разных улиц.
Нет, один и тот же дом располагаться сразу на нескольких улицах не может.
> Ну… Примерно так у меня и получается. Так, да не так.
Сделай ER-модель, иначе будешь путаться. И желательно её делать сразу в моделере, я обычно PgModeler использую, но для Sqlite он не подойдёт.
Отредактировано Rodegast (Дек. 20, 2024 14:04:57)
Офлайн
xam1816Если уникальность номера дома определять только его id в таблице, то появляется возможность несколько раз добавить в таблицу один номер дома, но с разными id. Мне не нужно такое дублирование.
Уникальность дома обеспечивается его Id в таблице, почему нужно определять его уникальность улицей и номером дома?
xam1816Всё правильно. Выше я приводил упрощённую структуру моей БД. Есть таблица Address, в которой, в качестве адреса, собраны записи с идентификаторами региона (области, края), города и улицы. А в таблице Building номер здания связан с id записи из таблицы Address. И уникальность номера дома обеспечивается именно этой связкой. Хотя в столбце House_No могут быть повторяющиеся номера, но в связке с адресом они становятся уникальными.
В разных городах может быть дом с адресом Ленина 20 например. Тогда нужно связку: город, улица ,дом.
RodegastНе помогло. Или помогло, но слабо. Сначала обдумывал в голове, потом пытался моделировать в MySQL Workbench. Потом начал писать код и модель стала меняться по ходу. Трудно было начать. На сегодняшний день более-менее разобрался, процесс идёт нормально.
Сделай ER-модель, иначе будешь путаться.
Отредактировано Alex.Pro. (Дек. 20, 2024 16:05:56)
Офлайн