172 похожих чатов

Всем привет! Что можете сказать касательно использования массивов на практике

? Допустим список языков пользователя хранить лучше в массиве или делать отдельную таблицу с (id, user_id, language)?

18 ответов

4 просмотра

За всю жизнь никогда не видел применения массивов на практике, кроме как для подсовывания в запрос с ANY. Но гром не грянет, если вы эти языки сделаете массивом и пойдете спать. Делать отдельную таблицу «правильнее», только она у вас уже денормализована. Делайте languages (id, name) и m2m с users.

b s
За всю жизнь никогда не видел применения массивов ...

Понял, спасибо, то же самое получается можно сказать и касательно списка допустим подписчиков группы, списка скилов и остальных подобных вещей ? Только я не совсем понял что значит m2m?

alexander 𝗞𝘂𝘇𝗻𝗲𝘁𝘀𝗼𝘃
Понял, спасибо, то же самое получается можно сказа...

m2m — many-to-many. Со списком подписчиков группы в виде массива на вас сразу обрушатся небесные кары. Например, вы останетесь без внешних ключей. Юзера удалили, а он до сих пор подписан на какую-то группу. С языками попроще, так как они торчат сбоку, очень редко меняются и основном разве что добавляются.

b s
m2m — many-to-many. Со списком подписчиков группы ...

А, теперь уже точно понял, спасибо). Ну то есть опять же зависит от ситуации, но в идеале предпочтение лучше отдавать именно отдельным таблицам ?

b s
За всю жизнь никогда не видел применения массивов ...

через массивы можно делать column-storage-для-бедных, временами очень выручает

может вам CREATE TYPE AS ENUM нужен?

Виктор Егоров
может вам CREATE TYPE AS ENUM нужен?

А какая разница? Все равно массив. ENUM — это ж такая строка для экономии байтиков.

Виктор Егоров
может вам CREATE TYPE AS ENUM нужен?

А в чем принципиальная разница ?

b s
А какая разница? Все равно массив. ENUM — это ж та...

это число на самом деле, с доступом по строке.

alexander 𝗞𝘂𝘇𝗻𝗲𝘁𝘀𝗼𝘃
А в чем принципиальная разница ?

а покажите схему (из 2-х таблиц?), в которой используется такой вот массив для ограничения

массивы норм.

alexander 𝗞𝘂𝘇𝗻𝗲𝘁𝘀𝗼𝘃
А, теперь уже точно понял, спасибо). Ну то есть оп...

Ну вот гляди. Выбирает у тебя пользователь языки. А где их список (полный) хранится? В коде. А нафиг они там в коде? Сделай таблицу languages, пусть там хранятся. И пользователю будешь показывать все содержимое таблицы languages при выборе. А еще тетя-админ твоей революционной социальный сети сможет сама добавлять языки, просто добавляя новую строчку в languages, а не дергать тебя каждый раз, когда на свете появляется новая народность. Круто? Круто. Делай отдельную таблицу, как деды завещали.

b s
Ну вот гляди. Выбирает у тебя пользователь языки. ...

ага, добавит она строку для нового языка, а там rtl, и переводов нет.

b s
Ну вот гляди. Выбирает у тебя пользователь языки. ...

Только я не совсем тогда понимаю как связывать таблицу со списком языков, в которую тетя может добавить языки, и список языков юзера🤨

b s
При помощи таблицы languages_users(language_id, us...

Ааа, ну то есть надо получается две таблицы. В одной чисто список языков доступных с айдишниками, а во второй список языков пользователей, где language_id ведёт в первую таблицу ?

b s
Это называется many-to-many и прекрасно гуглится.

Я в том плане, правильно ли я понял твою мысль ?

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А чем вам питонисты не угодили?😂
.
79
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Карта сайта