Найти - Пользователи
Полная версия: Редактор БД
Начало » Базы данных » Редактор БД
1
alexander4
Пробую сделать универсальный редактор БД. Возник вопрос как работать если попадется не стандартная таблица в которой нет уникального первичного ключа?
То есть например я пытаюсь изменить 1 из значений в таблице, но как мне найти его в базе?

P.S. Пытаюсь сделать нечто вроде того, что есть в средах от jetbrains, где можно подключиться к базе и в табличном режиме менять данные в ячейках.
vic57
alexander4
можно подключиться к базе и в табличном режиме менять данные в ячейках.
это есть в примерах PyQt в в разделе sql - элементарные модели
Rodegast
> как работать если попадется не стандартная таблица в которой нет уникального первичного ключа

Первичный ключь должен быть в любом случае. Может не быть поля id, тогда нужно использовать естественный ключь.
Slow
Rodegast
> как работать если попадется не стандартная таблица в которой нет уникального первичного ключаПервичный ключь должен быть в любом случае. Может не быть поля id, тогда нужно использовать естественный ключь.

Но ведь это не так.
В общем случае, в некоторых РСУБД всё же можно создать таблицы без первичного ключа. Правда, это серьёзно ограничит функционал. Да и буква Р в аббревиатуре “РСУБД” сразу теряет смысл.

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

MS SQL до какой-то там версии вообще ничего не делал и жил с дубликатами, причем работа с такой таблицей через их собственную орм была невозможной, только на голых запросах.

С таблицами без первичных ключей на других СУБД не сталкивался, но подозреваю, что везде есть свои подводные камни, сильно зависящие не только от СУБД, но и её конкретной конфигурации.

По поводу первичных ключей - они могут не только отсутствовать или быть скаляром, но и быть составными, что автору нужно опять-таки учитывать.

Как то так, вкратце
Rodegast
> В общем случае, в некоторых РСУБД всё же можно создать таблицы без первичного ключа.

Можно практически во всех, но это не значит что СУБД не сможет однозначно идентифицировать строки таблицы. Как ты правильно заметил Postgres использует для этого OID, а например Sqlite использует rowid. Вот эти идентификаторы и могут выступать в качестве первичного ключа.
Но может быть и другой подход. С точки зрения модели данных всегда найдётся множество столбцов которое будет однозначно идентифицировать данные (заметь именно данные, а не строки которые могут дублироваться) в таблице. Такой подход часто используется в универсальных инструментах для работы с СУБД, например в DBeaver-е.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB