Задать вопрос
Yokibaru
@Yokibaru
node.js, c#, UI

Табличная бд, вопрос: как читать данные?

есть данные которые надо записать координаты (x;y) в таблицу.
пример таблицы:
| |1|2|
|1|x|Y|
|2|C|v|

вопрос: возможно ли читать данные спрашивай x и y (например 1;2 = C)?
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
Сделай обычную таблицу с колонками x, y, value и делай запрос SELECT value FROM table_name WHERE x = ? AND y = ?;

А ещё то что ты хочешь очень похоже на Excel, только там в качестве координаты по горизонтали используются буквы, а не цифры.
Но при этом преобразование координаты из десятичного числа в "номер" колонки в Excel - это операция, которую легко сможет сделать школьник, который не прогуливал информатику и помнит, как преобразовывать любое число из 10-чной системы счисления в n-ричную.

UPD:
Но если заполнены обязательно все клетки, то тогда дешевле будет хранить это как непрерывную последовательность символов в файле и брать значение по сдвигу.
Это при условии, что значение в каждой клетке имеет длину в 1 символ.
Но вообще если добавить больше конкретики - можно придти к наиболее оптимальному решению.
Спасибо Алан Гибизов за напоминание, что программирование не только лишь про веб и реляционные бд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Колонки нельзя называть цифрами. Обычно дают имена начиная с латинских букв. id, c1, c2 например.
тогда
SELECT c2 WHERE id = 1
выдаст
C
Вообще твой вопрос не про базы данных а про матрицы в программировании. По крайней
мере ту картинку что ты нарисовал в чистом виде в БД никто не кладет.
Ответ написан
@rPman
Чтобы ответить на вопрос 'как хранить?', нужно задаться вопросом 'как будешь искать и читать?'.

Типовой вопрос - нужен ли порядок в строках и колонках? не спроста ведь ты колонки и строки назвал цифрами. Беда в том что sql не очень эффективно работает с упорядоченными данными (там O(n) = n*log(n) трудоемкости с оговорками) и для того чтобы строки упорядочить, нужно будет либо хранить дополнительное поле для сортировки (иногда хватает pk id с autoincrement но до тех пор пока записи не удаляешь)

Так же есть вопрос на многопользовательский (точнее одновременный в несколько сессий) доступ к данным на запись (или запись + чтение). Наличие такого требование значительно поднимает сложность задачи, sql базы для этого предлагают транзакции и блокировки.

Следующий вопрос, нужно ли искать/сортировать по значению. И отрицательный ответ на этот и предыдущий вопрос могут вообще дать ответ - не пользуйся sql.

Универсальный способ хранения матриц переменной размерности это таблица, где каждая запись - одно значение ячейки, с полями (int x,int y,value) где x,y - номер колонки и строки соответственно. Этот же метод самый неэффективный, особенно когда таблицы большие.

Таблицы маленького фиксированного размера (колонок), при отсутствии необходимости тосовать порядок колонок в запросе, можно хранить как есть, по одной строке матрицы в строке базы данных, в таблицах (y,x1,x2,x3,x4,x...) где x1,x2,x3 это значение колонок с номерами 1,2,3 соответственно а y - номер строки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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