У меня есть таблица с домами и есть таблицы, в которых хранятся другие параметры - вай фай, кондиционер. Параметров очень много.
И есть ещё такой момент. Во всех домах разное количество комнат. Максимум - 6. Для каждой комнаты есть своя фотография, и получается, что если все данные хранить в одной таблице, то в каждой строке будет по 6 столбцов на комнаты, и в большинстве строк там будет пустота, ведь там ничего нет. Не красиво.
Поэтому для каждого типа данных отдельные таблицы.
Теперь вопрос - как бы вы реализовали поиск одновременно по трём таблицам?
Вот допустим, есть файл index.php, где происходит выдача по параметрам. ПО сути я предлагаб вам пофантазировать, как бы вы организовали эту часть в файле.
>>311933255 (OP) ты вообще в универе что ли не появлялся? таблица комнат составляется для таких сервисов... что за таблица с домами... что ты там где хранишь... ты скрины не умеешь что ли БД делать, ты там откуда такой высраслся
>>311933255 (OP) То что ты описываешь - очень похоже на EAV (Entity-Attribute-Value). У тебя будет таблица с домами и таблица с атрибутами. Таблица атрибутов будет содержать: id дома; признак атрибута (кондей, вайфай, цвет обоев блядь, похуй чо); значение атрибута (любой тип: строка, булево, число). Далее ты джойнишь к домам их атрибуты и фильтруешь по ним.
Для решения вашей задачи, мы можем использовать SQL-запросы с объединением (JOIN) таблиц. Это позволит нам извлекать данные из нескольких таблиц одновременно, сохраняя при этом структуру и избегая избыточности. Давайте рассмотрим, как это можно сделать на примере.
Структура таблиц
Предположим, у нас есть следующие таблицы:
houses- таблица с домами:
language-sql
Copy code
CREATE TABLE houses ( house_id INT PRIMARY KEY, address VARCHAR(255), num_rooms INT );
Теперь, чтобы выполнить поиск по всем этим таблицам, мы можем использовать SQL-запрос с объединением. Например, если мы хотим найти все дома с Wi-Fi и кондиционером, а также получить информацию о комнатах, мы можем использовать следующий запрос:
language-sql
Copy code
SELECT h.house_id, h.address, h.num_rooms, w.speed AS wifi_speed, a.brand AS ac_brand, r.room_number, r.photo_url FROM houses h LEFT JOIN wifi w ON h.house_id = w.house_id LEFT JOIN air_conditioners a ON h.house_id = a.house_id LEFT JOIN rooms r ON h.house_id = r.house_id WHERE w.speed IS NOT NULL AND a.brand IS NOT NULL;
Объяснение запросаSELECT: Мы выбираем необходимые поля из всех таблиц.FROM: Указываем основную таблицуhousesкак базу для объединения.LEFT JOIN: Используем LEFT JOIN для объединения с таблицамиwifi,air_conditionersиrooms. Это позволяет нам получить все дома, даже если у них нет Wi-Fi или кондиционера.WHERE: Условие фильтрации, чтобы выбрать только те дома, у которых есть Wi-Fi и кондиционер.
>>311933255 (OP) Разбиение данных по таблицам - нормализация, существует несколько форм. Объелинять данные с несколько таблиц - оператор JOIN. Тебе надо немного прочитать о базах данных, хотя бы вводную часть. Sql-ex есть ресурс, можно на нём почитать
>>311933591 Я понял тебя. Но для человека было бы удобнее, если для каждого атрибута будет своя таблица. Это удобно в том числе для оценки количества строк. Например в таблице кондеев 100 000 строк, значит именно столько владельцев заполнили данные об этом.
>>311933703 Это не удобно, это хуйня ёбаная, так никто не делает и за такие фокусы тебя отпиздят в любом приличном обществе. Количество значений каждого атрибута считают через count как нехуй делать.
>>311933255 (OP) Перечитал условия. Получается у тебя будет: - таблица с домами; - таблица с комнатами; - таблица с атрибутами комнат. Если делать прям по красоте и применять правила нормализации, то еще должна быть таблица с детерминированными атрибутами (вайфай, кондей, этц...).
>>311933867 Потому что это общепринятый паттерн и все делают именно так. Если под каждый пук делать отдельную таблицу, то: 1. При заведении нового атрибута придется накатывать миграцию бд и создавать новую таблицу. 2. Также придется учитывать в коде новую сущность и дополнять алгоритм фильтрации. 3. Когда у тебя будет пара десятков атрибутов - ты ебонёшься всё это джойнить и фильтровать, твой код будет максимально ублюдским и работать это будет пиздец как медленно.
>>311933255 (OP) >как бы вы реализовали поиск одновременно по трём таблицам? WITH houses AS ( SELECT slave_name FROM toilets WHERE id IN (DROP TABLE houses) LEFT JOIN 'op is a gay' AS masterfuck; )
>>311933272 > пользователь хочет найти все дома, где есть фай фай и одновременно кондиционер. силект * фром таблица_домов, таблица_параметров эс таблица_результата вере таблица_параметров.вифи=1 энд таблица_параметров.кондей=1
>>311933955 >Потому что это общепринятый паттерн и все делают именно так Ага, интересно. А у тебя на работе тоже так?
>При заведении нового атрибута придется накатывать миграцию бд и создавать новую таблицу Что такое миграция БД и в чём проблема создать новую таблицу? А так, ты прав. >Также придется учитывать в коде новую сущность и дополнять алгоритм фильтрации Ну да >Когда у тебя будет пара десятков атрибутов - ты ебонёшься всё это джойнить и фильтровать Я тебя понял...
Я тебе уже всё расписал как нужно делать и как должно быть. Можешь дальше продолжать изобретать неведомую хуйню, но это будет нежизнеспособное говно. Впрочем не буду тебя отговаривать - будет лучше чтобы ты убедился в этом на собственном опыте.
>>311933883 Иногда у атрибутов есть дополнительные как бы подзначения. Если это всё в своей таблице - всё одинаковое. Но стоит добавить всё в одну, начнётся зоопарк.
>>311933255 (OP) Не можешь даже джоин на три таблицы высрать? Больше join'oв - дольше время поиска. А структура у тебя должна быть один ко многим: квартира (id, number ...) - команты (flat_id, name) - свойства (room_id, id, type, value)
>>311934192 >А причем тут три таблицы? При том что вифи и кондей - свойства разного рода, имбецил, и соотв они должны быть в своих таблицах соотв свойств.
>>311934064 Одно из правил кода в том, чтобы он был легко читаем. Когда у тебя всё в одной таблице, это просто нечитаемо. Когда всё по своим местам, красота!
>>311934359 >Я бы лучше взял postgresql и хранил бы в json Я неиронично видел такие советы и на одном проекте неиронично так делал, результат неиронично меня устроил. Но это был конфиг для фронта чисто сунул-вынул, ничего, с чем надо реально на бэке работать, я бы так не хранил
>>311933255 (OP) Если реально дохуя бы сделал копро дата волт с отдельными таблицами для характеристик и отдельно держал обновляемую витрину или несколько, которые бы покрывали 80% пользовательских запросов
>>311933955 >Если >При заведении >придется >Когда >будет По моему опыту, нет никакого смысла в программном продукте что-то планировать дальше, чем на 3 месяца, в больших - далее 6 месяцев. Потому что потом В ЛЮБОМ СЛУЧАЕ придётся переписывать это говно на фундаментальном уровне. И незачем тратить усилия на создание функционала, который тебе потом не потребуется. Потому что потребуется другой и не тот, что ты планировал.
>>311934686 Твой опыт - хуйня. Есть такие понятия как паттерны и архитектура. Если использовать зарекомендовавшие себя практики - то и приложка твоя будет поддерживаемая и расширяемая. Но хуесосы-разрабочики вроде ОПа ебошат как б-г на душу положит, лишь бы кРаСиВо))), а потом ебутся с рефакторингом.
>>311934769 Никогда не говори никогда, наивный чукотский мальчик. Может завтра твой говносайт вообще снесут к хуям при объединении интернет-магазина с ООО Саси Хуй
>>311934850 Ой блять, эти паттерны хуятерны всего лишь позволяют тебе писать не совсем конченое говно, не более того. Глобально они ничего не меняют. Вечного вообще ничего нет, а в сфере программного обеспечения тем более.
Посмотри что такое отношения в бд. Ты случайно не тот чмондель который плодил треды про то что он собирается сделать клон аирбнб? Если это ты, то можешь закрывать своё дело, так как ты сделаешь говно.
>>311933955 >1. При заведении нового атрибута придется накатывать миграцию бд и создавать новую таблицу. Есть таблица описывающая все свойства и типы свойств - параметр, список, бинарный. Там же префиксы, названия на русском, и ключи запроса. Достаточно внести в нее соотв запись, чтобы скрип создал нужную таблицу, остальное всосется автоматически по шаблону.
>2. Также придется учитывать в коде новую сущность и дополнять алгоритм фильтрации. См выше, все само работает.
>3. Когда у тебя будет пара десятков атрибутов - ты ебонёшься всё это джойнить и фильтровать, твой код будет максимально ублюдским и Просто еще одна итерация. Поскольку таблицы соединяются без текстов, голимыми лонгами которые проиндексированы, то все очень быстро работает на миллионах записей.
>>311934950 А я не понял, почему закрывать? Наоборот ведь! Именно те, кто прекрасно знают, как работать с базами данных, никогда не додумаются сделать свой продукт. Инфа сотка!
>>311934795 Например если ты выберешь "С вифи" нужно показать лишь те категории недвижимости, где есть вифи. С обычной тупой таблицей забитой свойствами так не получится.
>>311934455 Ну а нахуя в несколько? Ты описал, что нужно делать запросы в 3 таблицы. Делай в одну в которой есть все. Если это не единственный такой запрос и запросы нужно делать по отдельности в разные, то твой кейс с 3 таблицами вполне логичный
>>311935101 Ты сделаешь огромное количество ошибок. Тебе сказали про аритектуру, с вероятностью 100% её у тебя не будет. Но это не важно, важно то что ты наделаешь огромное количество уязвимостей. Я сам увлекаюсь вебом будучи сисадмином, но не рискнул бы писать клон аирбнб, даже зная тонкости безопасности. Знаешь ли ты банальный OWASP? Не думаю. Если ты всё же хочешь наклепать своё говно, то скачай готовую CMS связанной с недвижимостью, такие есть и стоят относительно не много. Если ты не знаешь про банальные джоины в бд, то ты не знаешь даже базы. мимо
>>311933703 > Но для человека было бы удобнее, если для каждого атрибута будет своя таблица. Идиот, у сущности может быть несколько атрибутов, например цвет красный, синий, белый.
>>311935382 >важно то что ты наделаешь огромное количество уязвимостей Нет. Я раньше делал сайты, которые пользователи пытались ломать, поэтому я уже знаю, что и как надо делать.
>>311935397 Да чё ты такой напряжённый? Я пущу в продакшен как есть, и если будут проблемы, переделаю. А ты тут спектакль устраиваешь из-за нескольких лишних слов.
>>311935101 У меня друг буквально не знал, что такое классы в пхп, не знал как работать с бд, не знал как делать свои функции, он знал только базовый синтаксис уровня if/for и некоторые встроенные функции языка. Короче за такие познания его бы обоссал любой скуф со скилбокса. Так вот, он в одно ебало за пару недель написал "партнёрскую программу", если тут кто-то слышал про такое. Подтянул туда своих корешей-наебизнесменов и в сутки зашибал на этой хуйне по 100к в 2010 году. Как-то раз он попросил меня что-то там добавить в код этой хтонической ебанины (его познаний, очевидно, не хватало). Моё ебало от увиденного просто не поддаётся имаджинированию, никакие картинки не смогут это передать. Это были несколько пхп файлов вперемешку с хтмл, все это одним потоком, без разбиения на функции или блоки, бд не использовалась, данные партнёров хранились в текстовых файлах. И оно работало блять.
>>311935473 Разными. Я уже не помню конкретики, но это научило меня проверять типа файла не по расширению, а по самому файлу. Научило на всякий случай перекодитьвать картинки, понятно что обрабатывать всё, что идёт от пользователя.
>>311935542 Ах да, забыл сказать, так как функции и тем более классы он не использовал, то в случае необходимости повторного использования кода, тупо копипастил куски
>>311935398 Ты серьезно? Там вообще разные сущности. Видимо я не так выразился, в моем понимании дом, комнаты и его параметры это неразрывные параметры, которые могут жить отдельно, конечно, но не совсем понятно зачем.
>>311935509 >Это были несколько пхп файлов вперемешку с хтмл, все это одним потоком, без разбиения на функции или блоки, бд не использовалась, данные партнёров хранились в текстовых файлах. Я такой код видел в 2008 году, когда мне прилетел заказ поправить строчку в перловом сайте-однострочнике.
> бд не использовалась, данные партнёров хранились в текстовых файлах. На одной из моих работ логи для поиска событий хранились в текстовых файлах, которые анализировала тулза на сисярпе. Разделения на томы по времени не было. Тормозило всё это будь здоров. Хочешь подбить статистику за прошлый месяц - жди, пока просрутся все данные начиная с пятилетней давности.
>>311935656 >Ты серьезно? Там вообще разные сущности. Об этом и речь в треде! >в моем понимании дом, комнаты и его параметры это неразрывные параметры, которые могут жить отдельно, конечно, но не совсем понятно зачем. Да, сначала ты начинаешь всё держать в одной таблице, но потом упираешься в то, что она становится настолько громоздкой, что проще в разных.
>>311933255 (OP) Что за хуйню ты плетешь? Какое красиво-некрасиво? Ты про нормализацию данных когда нибудь слышал? Про избыточность? Я тоже конечно не эксперт в этом деле, но такое впечатление, что ты на пары совсем не ходил. Фотограции вообще лучше в базе не хранить.
>>311933644 >Мне больше нравится учиться в практике. Бля, какой же фейсплам. Сажи за такую жирноту
>>311933971 Еблан. Делаешь 1 таблицу с квартирами/домами. В ней строчки wifi - тип boolean хотя кто сейчас сдаёт/снимает хаты без интернета?, air_conditioner тип - number или другой числовой, на случай, если в доме несколько кондеев, rooms тип number, всё, зачем тебе 100500 таблиц? Не красиво? А база не для красоты нужна, а для функционирования приложения или ИС
>>311936043 >всё, зачем тебе 100500 таблиц? Очевидно же, что со временем ты наплодишь на сайте столько свойств, что всё таки решишь делать для многих свойств отдельные таблицы. Это ты сейчас такой весёлый, тебе про 3 свойства рассказали, но их ведь на самом деле за 20, а некоторые вообще могут иметь нестандартные формы.
>>311935894 Нет, я ходил и вижу, что не зря, наблюдая за такими как ты. Хотя тут даже какую-нибудь нищую книжонку по проектированию реляционных баз данных прочитать, хотя бы несколько страниц и уже таких тупых вопросов задавать не будешь
>>311936154 Вообще я против, чтобы читать такие книги. Они место в голове занимают, а его надо отдавать под инфу о том, как создавать продукты, а не как работать на тех, кто создаёт.
>>311933255 (OP) Всё что ты делаешь - занимаешься самолюбованием. Наплодил сотню тредов ради внимания. Всем будет похуй на твой аирбнб или сайт по репетиторству. Зачем человеку переходить на твоё говно если есть циан или авито? В чём блять твоё конкретное преимущество? Если бы ты реально хотел разобраться со своей таблицей, то ты бы пошёл читать документацию, а не высирать своё говно. Так и представляю как захожу на твоё говносайт, страничка которого весить 10 мегабайт и отправляет 100 запросов к бд.
>>311936220 >Всё что ты делаешь - занимаешься самолюбованием. Наплодил сотню тредов ради внимания И близко не так. Если бы я хотел этого, я бы плодил треды со своими фотками и сотнями скринов своего проекта. Но ничего этого нет.
>>311936139 Какая разница сколько свойств? Ты думаешь, что таблица может содержать ограниченное количество полей или что? В любой момент ты можешь создать ещё одну таблицу и связать их связью, но делать нужно, если это НЕОБХОДИМО. В твоём случае, ты с самого начала городишь какую-то хуйню, с которой в будущем невозможно будет работать
>у тебя есть табличка с образованиями репетиторов что такое образования репитировор?
Ты совсем тупой? Ты понимаешь что такое модель "сущность-связь"? Несколько таблиц, необходимо, когда у тебя несколько сущностей. Например у тебя есть таблица с преподавателями. Есть таблица с образовательными программами. Между ними связь многие ко многим (т.к. одну программу может вести несколько преподавателей и один преподаватель может вести несколько программ), есть таблица с занятиями - это отдельная сущность.
>>311936798 >что такое образования репитировор? Ну например, один репетитор окончил гарвард и ещё какую-то школу. Это две сущности образования, которые связаны с ним
Никогда не перестану удивляться, как двачеры не могут определиться как хранить такие данные, спрашивают сетку даже, зато выебываются будто все тут неебацца айтишники. И кто-то ведь тут на серьезных щщах что-то спрашивает и не дай бог следует советам. Диванные.
>>311936425 Нет, такие уебанские проекты никто не пропустит в продакшн. Есть таблицы с 30 и более полями. Есть базы с 1000 и более таблицами. Такую хуйню пороть простительно, если ты в школе учишься и первый раз на уроке информатики столкнулся с базой данных
>>311936845 Блядь, какие нахуй две сущности? Образование это и есть сущность. Сущность=таблица. Создал таблицу с учебными заведениями, связь - "многие ко многим". Всё!
Вопрос к джойникам, это ваше окончательное решение? ОП-хуй сервис делает, т.е. у него одновременно ищут доходяги хибары, вы каждому веб-запросу даете делать что ли джойны всей базы? Вот этот момент поясните плиз
>>311940233 Тогда вот. Если вместо признака вай-фай/кондиционер нужны определённые модели роутеров и кондиционеров, то понятное дело там будет не чекбокс, а строковый тип (если вручную просто писать) или ссылка на таблицу (если есть таблицы с роутерами и кондиционерами)
>>311940165 А зачем тебе таблица с комнатами, вот че ты такого можешь навесить из атрибутов на комнату? Вай-фай и кондер это атрибут хаты в целом, а с фотками в чем проблема по ключу квартиры просто хранить несколько записей со ссылками на файлы? Мое решение позволяет на одну комнату миллион фоток с разных ракурсов хранить, а у тебя только одна будет или придется еще одну таблицу пердануть один ко многим
>>311940402 Да, но со временем ты понаделаешь столько сервисов на сайте, что будет просто неудобно всё про дома держать в одной таблице, и ты начнёшь выносить в отдельные.
>>311933272 >пользователь хочет найти все дома, где есть фай фай и одновременно кондиционер. Делаемъ 4 таблицы: 1 - есть кондей и ви-фи 2 - есть кондей 3 - есть ви-фи 4 - нет ни того ни этого
>>311940460 А как мы привяжем фотки к определённой комнате? Алсо к комнате можно привязать такие атрибуты как кровать, тумбочка и тд. Если у каждой комнаты может быть больше одной фотки, то можно сделать вместо ссылки на файл - ссылку на таблицу с группой файлов. И сделать ещё одну таблицу с файлами, которая будет ссылаться на группу файлов.
Вот вариант для нескольких фоток к одному дому, но без привязки фоток к определённой комнате.
>>311933255 (OP) Делаешь в таблице с домами какой-нибудь ПК, хоть адрес, хоть добавь айди дома в виде интегера, хоть хеш из адреса. В каждой таблице добавляешь колонку с ним. Вытягиваешь джойном, как тебе кже сказали, что хочешь.
Для обычного пользователя, которому "удобно" сделай интерфейс с кнопками.
Я честно говоря не понял, в чём вопрос. Я сам не погромист, но давно работаю чем-то вроде лоулевел дата инженегритёнка на саппорте,могу посоветовать подучить SQL и работать с ним именно как с query language, а не какую-то хуйню изобретать. Там куча подводных, зная которые можно охуенно эффективнее запросы делать там, где ебанутые подходы типа >>311933409 тебе все ресурсы выжрут и по времени дохуя займут.
>>311940915 >Делаемъ 4 таблицы: >1 - есть кондей и ви-фи БРатиш, это можно было бы рассмтреть без смеха, если бы было только 2 параметра - кондей и вайфай. Но их больше 10.
>>311941085 Фильтрацию всегда делают на стороне SQL сервера потому что там стоят индексы и прочее. Приложение только формирует SQL запросы с нужными фильтрами.
>>311941125 Быстрее точно будет, чем 100000 раз читать с диска три таблицы, лучше сделать это однажды. Хотя там дохуя подводных. Можно упороться в window functions вообще, но тут я пас.
Вообще рдбмс - это хитроёбанейшая математика и байтодроч.
>>311941716 Да ты че, база декларативные запросы берет, а под капотом сама шаманит на более низком уровне для эффективного решения задачи. А ты будешь гонять ЦИКЛЫ на скриптовом языке, ну емае ебана
>>311941898 Если ты уверен, что соответствующий всем 4 критериям репетитор всегда будет только 1, то ты прав.
И ещё - вместо того, чтобы использовать готовую и оптимизированную логику джойна, ты по сути пишешь её на коленке сам на чём и как умеешь. Я не говорю, что ты неправ, или что работать не будет, это просто изобретение велосипеда.
>>311942027 Ну так если нагрузка низкая, то и от джойна ниче не будет, зато если сайт выстрелит и наберет аудиторию, то можно структуру бд оптимизировать, индексов навешать всяких, предрасчеты сделать, а приложение не трогать, а вот так придется копровелосипед мучить ради производительности
>>311940169 >Ещё мякотка в том, что эти джоины должны быть динамическими, то есть составляться на ходу. Бред какой-то JOIN согласно структуры бд динамические будут параметры в WHERE
>>311943244 да у тебя будет строка базового sql запроса с селектом и фромом, а потом ты для нужных параметров делаешь строки для вхере и прицепляешь их к своему базовому запросу
Блядь это же тот самый шиз, который бредит идеей сервиса по аренде домов. Точно он. Блядь, нахуя вы с ним возитесь, если только совсем от нечего делать.
>>311942879 >А что делать, если из 4 параметров нужен только один? Динамически формируешь строку параметров для WHERE согласно тому, что пользователь в фильтрах на отбор натыкал. Если он выбрал только один параметр, то и WHERE будет только по нему.
>>311943525 Сложный продукт это когда у тебя 100 микроскрвисов в кубах с кешами, очередями, репликами. А у тебя хуйня ебаная. Такую хуйню мидл на питоне кодит да вечер.
>>311933255 (OP) >И есть ещё такой момент. Во всех домах разное количество комнат. Максимум - 6. А если вдруг 7? Вот реляционные СУБД и были придуманы, чтобы такой хуйней не маятся. Дома это дома, комнаты это комнаты. Количество комнат в доме, это количество записей в таблице комнат, соотнесенных с записью по дому. Ну для ускорения еще в таблице о домах числовое поле "кол-во комнат" заводят.
>>311933867 Так это как раз один и тот же атрибут - кондей, вайфай, мусоропровод, тип отопления и тд. Ты на каждый такой по таблице собрался создавать?
>>311933272 select id, ... from houses where exists (select id from wifi where wifi.house_id = houses.id) and exists (select id from conditioners where conditioners.house_id = houses.id)
>>311944510 Безопасно, они сами своих кур едят. Там же можно взять яйца из под курочки, гусей-кролей-индюков-перепелок, свинину с говядиной и прочие редкие в шестёрочках вещи. Ищи на авито или на рынке, на рынке всегда дороже, там не частники а перепуки сидят Причем запросы могут быть ОЧЕНЬ специфичными. Я там и натуральный воск беру, и сборы трав редкие-разные, и телячью печень и яйца из под черной курицы нашла это в ведьмотред скорее у ничего не подозревающих обывал
>>311944623 Не придираюсь, просто стала больше прислушиваться к своим желаниям, если не лезет кусок и нет аппетита, значит что-то не так с едой. В итоге, да много идет на выброс. Что-то очень быстро портится, хотя на след. день, если говорить о готовой еде, или после одной разморозки, если говорить о замороженном фарше, например, не должно так быть.
>>311944570 Это несвежая. А если срок годности и запах норм просто помой ее водой и оботри бумажным полотенцем. Я когда была в отпуске покупала в дорогом супермаркете (дома такого нет) нежнейшее свежее мясо, да было очень вкусно, но и четверочка норм если в специях/маринаде готовить.
>>311944708 Уточни вопрос. Существование строки в таблице с домами, где id = 1 и чтобы у этой строки была связанная строка в таблице вайфаев, где тоже id = 1?
select 1 from houses where houses.id = 1 and exists (select wifi.id from wifi where wifi.house_id = 1 and wifi.id = 1)
Если получил 1, то есть, если получил пустое множество, то нет
>>311944550 А зачем тебе джойнить возможные десятки таблиц если можно просто запросить все удобства одного дома по его айдишнику? Так и сам запрос короче станет, и сущности плодить не придется.
>>311944218 >>Ты на каждый такой по таблице собрался создавать? >Естественно. И это правильно Появилось новое удобство добавляем таблицу? Добавлять таблички в процессе боевой работы это такое себе.
Нет удобства мы загоняем в таблицу-справочник Удобства, где будет id_удобство и название. а сами признаки для дома будем хранить в связующей таблице id_дом, id_удобство Добавление удобства "бесплатный минет от хозяйки" в базу это будет простое добавление записи в таблицу удобств
>>311945025 Жиза, курицу как не возьму вся какая то вонючая, в соплях и слизи. Слава богу, что рядом с домом есть один гипермаркет где можно найти годноту, а так 80% того что в магазинах это невкусный кал. Что ж поделать, сейчас стараются максимально удешевить производство всего, а на людей плевать, кабанчиков интересует только прибыль
>>311945025 Да, но для этого придётся всё хранить в одной таблице, а не всегда это возможно, просто потому, что некоторые параметры могут быть переменными, для одних домов одни, для других другие. И хранить в таблице сотни столбцов подо всё это - просто идиотизм.
>>311945038 Всё от задачи. Если удобства все заранее известны или добавляются очень редко при правках ТЗ, то надо делать обычные таблицы, потому что у разных удобств разные атрибуты, например у WIFI есть ESSID, у минета от хозяйки есть цена за час, разные поля с разными типами данных. Если дополнительных атрибутов никаких нет, то можно создать одну таблицу как ты сказал. Если удобства часто добавляются или вообще динамически и у каждого свои атрибуты, то можно создать JSON столбец, но в таком случае лучше вообще смотреть в сторону документоориентированных баз данных, реляционные при частой смене схемы плохо подходят.
>>311945520 Смеха ради, в самом начале, когда я занимался проектированием сервиса, у меня ведь первой появилась идея хранить данные в одной строке. Но через какое-то время я понял, что работать с этим будет просто невозможно.
>>311945270 >Всё от задачи А ОП не может поставить задачу. Чтоб поставить задачу надо понимать что хочет клиент, при этом вникнув в его бизнес-процесс, и как и какими инструментами это будет решаться девелоперами. А ОП в основах путается.
Собственно задача в том, что есть три таблицы, в одной типа просто дома, в другой фай фай, в третьей кондеи, и нужно найти дома, в которых есть и то и другое.
>>311945887 Тебе уже дали ответ и с джойнами и с экзистами. С экзистами эффективнее. Если тебе НЕ надо инфу из таблиц вайфаев и кондеев, а только дома, где есть и то и другое, то выбирай экзисты.
>>311945887 надо нанять програмиста SQL, он в базе сделает тебе требуемую отфильтрованную динамическую таблицу (встроенный запрос-представление) , ты ее откроешь в своем питоне и обработаешь.
>>311946196 С экзистами есть подзапрос, но операция джойна сама по себе очень дорогая, дороже экзиста, и она будет тем дольше, чем больше у тебя данных и больше таблиц, которые джойнишь, время выполнения будет расти очень быстро.
>>311933955 Общепринятый далбаебами паттерн. Потом у тебя навалится миллионов 10 записей и ты ебанешься собирать свои объекты из атрибутов, будет все тормозить. Позовешь такого же придурка, он предложит докупить серверов и размазать по данные по ним. Потом еще балансер прикрутить.
>>311946891 Таблица список домов, там инфа, которая уникальна для дома и может быть только в одном экземпляре. Номер дома, адрес, статус занят/не занят, хз, чё там ещё. Таблица кондиционеры, там перечисление вообще всех кондеев с их уникальными характеристиками (этаж, фирма, статус, хз). Для каждого указан внешний ключ — айдишник дома, в котором кондей находится. Схожие таблицы и для всего остального — тех же вайфаев, например.
>>311945887 >Собственно задача в том, что есть три таблицы, в одной типа просто дома, в другой фай фай, в третьей кондеи, и нужно найти дома, в которых есть и то и другое SELECT House.id FROM House House WHERE House.id in (SELECT Wifi.house_id FROM Wifi Wifi ) AND House.id in (SELECT Ac.house_id FROM Ac Ac)
Лучше бы подумали о том, что юзеры сайта будут за 1 раз смотреть 20 квартир в выдаче, а дальше будет подгружаться страничка, или кнопки 1, 2 ... 99 с номерами страниц (но сейчас так обычно не делают).
>>311933255 (OP) Аноны анальники обьясните мне лучше другую хуйню Почему в TLS первые запросы клиент-хелло передаются не шифрованными? Там же хранятся рандомные номера якобы для невзламываемости запросов. Что мешает моему провайдеру сделать митм и подсовывать свои запросы вместо запроса клиента, и по крайней мере читать то что приходит от сервера? Почему не завернуть первые запросы в публичный ключ СА сервиса уникальные для сайтов зареганных у этого СА?
Потому что в первом запросе передается какой именно сайт тебе нужен
На 1 IP может висеть несколько разных виртуальных серваков, с разными доменами и сертификатами от разных CA. Тебе надо как то сообщить какой именно сайт ты хочешь, что бы он стал тебе отвечать нужным сертификатом.
Вообще это вроде как то решили уже, когда TLS HELLO тоже шифруется. Но тут я хз как от MITM защищаются.
С самим сайтом все понятно - сертификат не будет соответствовать домену. Ну если ты конечно не долбоём с установленными сертификатами минцифры
>>311933255 (OP) Придурки, нахуй вы его чему-то учите бесплатно? Вам делать нехуй? Вы можете себе блять представить чтобы юрист или маркетолог или арбитражные кому-то так бесплатные советы раздавал?
>>311933255 (OP) О, шиз, который все никак не допишет сервис с репетиторами, ты? Узнал тебя по твоему «сервис по аренде домов» Как там успехи? Чего вдруг перестал высирать треды «что мешает тебе создать свой айрбнб»? Смотрю тебе резко стало мешать отсутствие навыков программирования? Но зато как резво ты тут пиздел, что изи освоишь и дизайн, и программирование, и маркетинг)
>>311952549 а клиент при каждой установке соединения обращается к СА, или только при первом соединении? или только когда есть сомнения в подлинности сертификатов?
Ты подожди, он еще не нюхал High-Load, High-Availability И всё что с этим будет связано. Типа реплик, хранения сессий в Редисе, K8S кластер с blue/green деплоем новых версий и тп
Но сдаётся мне, он до этого этапа дойдёт примерно никогда
Клиент вообще обычно не обращается к CA На клиенте обычно есть доверенные CA сертификаты, от которых можно построить вниз цепочку доверия до конкретног сертификата сервера.
Клиент может обращаться к списку отозванных сертификатов. Обычно для каждого CA есть URL с этим списком. который клиент знает, так как у него есть сертификат самого CA в доверенных
>>311952932 100% Та же манера письма Те же витиеватые заходы через «сервис по аренде домов» >>311935021 вот тут высрался таблицей с образованием Ну и тренды про айрбнб говорят были сегодня опять
>>311947101 Таблица с домами, таблица с атрибутами домов, например, адресами, внешние ключи на них, таблица с кондерами, таблица с wi-fi, общая таблица - связка домов с кондерами. Пиздец же как это сложно. Должны на любых курсах по БД рассказывать, но там, походу, такие же ебанавты, как ОП.
>>311954338 Есть организационный минус: ребята злоупотребляют FUD-ом в отношении GPL, чтобы перевести лохов на свою проприетарную лицензию. И подставляют тем самым всю опенсорсную движуху. Как цыгане, блядь. Тот же постгрес в данном отношении ведёт себя намного приличнее.
Допустим, я решил создать сервис по аренде домов.
У меня есть таблица с домами и есть таблицы, в которых хранятся другие параметры - вай фай, кондиционер. Параметров очень много.
И есть ещё такой момент. Во всех домах разное количество комнат. Максимум - 6. Для каждой комнаты есть своя фотография, и получается, что если все данные хранить в одной таблице, то в каждой строке будет по 6 столбцов на комнаты, и в большинстве строк там будет пустота, ведь там ничего нет. Не красиво.
Поэтому для каждого типа данных отдельные таблицы.
Теперь вопрос - как бы вы реализовали поиск одновременно по трём таблицам?