Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2017 21:44:16

alexander4
Зарегистрирован: 2017-01-17
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Редактор БД

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

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

Офлайн

#2 Ноя. 8, 2017 22:34:43

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Редактор БД

alexander4
можно подключиться к базе и в табличном режиме менять данные в ячейках.
это есть в примерах PyQt в в разделе sql - элементарные модели

Офлайн

#3 Ноя. 8, 2017 23:02:20

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Редактор БД

> как работать если попадется не стандартная таблица в которой нет уникального первичного ключа

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 8, 2017 23:43:41

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Редактор БД

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

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

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

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

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

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

Как то так, вкратце

Отредактировано Slow (Ноя. 8, 2017 23:49:36)

Офлайн

#5 Ноя. 9, 2017 11:16:16

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Редактор БД

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

Можно практически во всех, но это не значит что СУБД не сможет однозначно идентифицировать строки таблицы. Как ты правильно заметил Postgres использует для этого OID, а например Sqlite использует rowid. Вот эти идентификаторы и могут выступать в качестве первичного ключа.
Но может быть и другой подход. С точки зрения модели данных всегда найдётся множество столбцов которое будет однозначно идентифицировать данные (заметь именно данные, а не строки которые могут дублироваться) в таблице. Такой подход часто используется в универсальных инструментах для работы с СУБД, например в DBeaver-е.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 9, 2017 11:17:28)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version