Re: таблица со строго одной записью
От: VsevolodC Россия  
Дата: 30.10.24 08:32
Оценка: +1
в данном конкретном случае я бы предложил 2 варианта:
1 таблица подразделений института с деревянной структурой где сам институт будет корнем
2 таблица параметров общего вида для всей БД, где будет несколько записей с названием, адресом и т.п.

таблица с единственной записью выглядит неестественно
Re[3]: таблица со строго одной записью
От: rFLY  
Дата: 30.10.24 08:34
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Не понял. Речь шла о хранении в БД и связях, при чем тут view ?

Если в ней данные не будут меняться, то почему бы не использовать вьюху и с ней уже работать как с таблицей?
Сорян, проморгал, что данные могут править.
Отредактировано 30.10.2024 8:43 rFLY . Предыдущая версия .
Re[7]: таблица со строго одной записью
От: Qulac Россия  
Дата: 30.10.24 08:37
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Stanislaw K, Вы писали:


PD>Я не понимаю, к чему все это. То, что версионность может понадобиться, я не спорю. Вопрос же не в этом, а в том, как быть, если запись именно одна.

PD>Если для этого варианта есть соображения — готов их выслушать, а уходить в сторону не буду.

Нет ни чего более не логичней, чем бизнес-логика, "выпрямлять" ее не всегда нужно, а по мне не нужно вообще. Это обычный инвариант, за соблюдение которого отвечает бд.
Программа – это мысли спрессованные в код
Re[2]: таблица со строго одной записью
От: m2user  
Дата: 30.10.24 08:59
Оценка:
VC>в данном конкретном случае я бы предложил 2 варианта:
VC>с деревянной структурой

Может всё-таки древовидной?

VC>2 таблица параметров общего вида для всей БД, где будет несколько записей с названием, адресом и т.п.


key-value таблицу уже предлагали..
Опечатки в именах ключей сложнее отслеживать.

VC>таблица с единственной записью выглядит неестественно


В теме уже приводили пример с таблицей, где хранится версия БД.
Строка всегда одна, но значение может меняться.
Re[2]: таблица со строго одной записью
От: Pavel Dvorkin Россия  
Дата: 30.10.24 09:01
Оценка:
Здравствуйте, VsevolodC, Вы писали:

VC>1 таблица подразделений института с деревянной структурой где сам институт будет корнем

VC>2 таблица параметров общего вида для всей БД, где будет несколько записей с названием, адресом и т.п.

VC>таблица с единственной записью выглядит неестественно


Cогласен, что неестественно, но не очень естественна и ситуация, когда есть таблицы факультетов, групп и т.д., а таблицы института нет, а вместо нее какая-то таблица общего вида...
With best regards
Pavel Dvorkin
Re[4]: таблица со строго одной записью
От: rFLY  
Дата: 30.10.24 09:12
Оценка:
Здравствуйте, rFLY, Вы писали:

В качестве бреда, опять же, с вьюхой. Если в ней сделать выборку только одной строки, например по ид, то сколько бы они не вставляли, то всегда будет возвращаться только выбранная. И значения будут меняться только в выбранной, если они, конечно, не полезут менять саму таблицу. Нет?
Re[5]: таблица со строго одной записью
От: Qt-Coder  
Дата: 30.10.24 12:01
Оценка:
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, rFLY, Вы писали:


FLY>В качестве бреда, опять же, с вьюхой. Если в ней сделать выборку только одной строки, например по ид, то сколько бы они не вставляли, то всегда будет возвращаться только выбранная. И значения будут меняться только в выбранной, если они, конечно, не полезут менять саму таблицу. Нет?


Вьюха это select. Чтобы поменять данные тебе нужен доступ до таблицы которая под ней.
Re[6]: таблица со строго одной записью
От: rFLY  
Дата: 30.10.24 13:07
Оценка:
Здравствуйте, Qt-Coder, Вы писали:

QC>Вьюха это select. Чтобы поменять данные тебе нужен доступ до таблицы которая под ней.

Апдейт вьюхи апдейтит таблицу, которую она использует в качестве источника.
Re[2]: таблица со строго одной записью
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.10.24 13:19
Оценка: +1
Здравствуйте, VsevolodC, Вы писали:

VC>таблица с единственной записью выглядит неестественно

Почему?
Re[3]: таблица со строго одной записью
От: Alex.Che  
Дата: 30.10.24 13:25
Оценка:
30.10.2024 16:19, "Михаил Романов" пишет:

VC>> таблица с единственной записью выглядит неестественно

МР> Почему?

наверное потому, что Сева не ораклист...
Posted via RSDN NNTP Server 2.1 beta
Re[3]: таблица со строго одной записью
От: paucity  
Дата: 30.10.24 14:14
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Cогласен, что неестественно, но не очень естественна и ситуация, когда есть таблицы факультетов, групп и т.д., а таблицы института нет, а вместо нее какая-то таблица общего вида...


Забей. Надо -- делай. Встречал такое не раз.

Как ограничить количество записей уже ответили.

Единственное, стоит ли всегда join'ить эту таблицу с другими, или сделать один раз select и запомнить значения полей в приложении?
Re[4]: таблица со строго одной записью
От: Pavel Dvorkin Россия  
Дата: 30.10.24 14:18
Оценка:
Здравствуйте, paucity, Вы писали:

P>Забей. Надо -- делай. Встречал такое не раз.


Я и не такое встречал , просто хотелось знать, что тут об этом думают и какая тут best practice.
With best regards
Pavel Dvorkin
Re: таблица со строго одной записью
От: vsb Казахстан  
Дата: 30.10.24 14:31
Оценка:
Я бы такую таблицу не делал. Захардкодить в коде названия и всё.
Re[2]: таблица со строго одной записью
От: Pavel Dvorkin Россия  
Дата: 30.10.24 14:36
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Я бы такую таблицу не делал. Захардкодить в коде названия и всё.


Хм. Там может быть десятка-два полей. Название, полное и сокращенное, министерство, адрес, телефоны и т.д. и т.п.

И меняться многие из них могут.

Ну и потом — БД вообще-то независима от кода, она самодостаточна должна быть.
With best regards
Pavel Dvorkin
Re: таблица со строго одной записью
От: Буравчик Россия  
Дата: 31.10.24 07:04
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>В некоторой таблице должна быть одна и только одна запись.

PD>Например, table institute — запись об институте, название, адрес, реквизиты и т.д.
PD>Поскольку речь идет о БД данного института, запись должна быть одна и только одна.

Нормальный вариант с одной строкой.

Иначе как сделать запрос "Выведи список студентов, живущих на одной улице с институтом"?

Про проверку единственности: https://stackoverflow.com/questions/3967372/how-to-constrain-a-table-to-contain-a-single-row
Best regards, Буравчик
Re[2]: таблица со строго одной записью
От: qaz77  
Дата: 31.10.24 07:16
Оценка: +2
Здравствуйте, Qt-Coder, Вы писали:

QC>Это запретит создавать записи с ID <> 1


Надо, наверное, и удаление этой единственной записи запретить.
Re[5]: таблица со строго одной записью
От: L_G Россия  
Дата: 01.11.24 08:08
Оценка:
PD>В этом-то и проблема.

Технологической проблемы нет.
Выходит, это чисто психологическая проблема (принятия нежелательного).
Предлагаю, минуя стадии отрицания, гнева, торга и депрессии, перейти сразу к принятию (факта ненужности FK)
Каша в голове — пища для ума (с)
Re: таблица со строго одной записью
От: kov_serg Россия  
Дата: 01.11.24 11:40
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Есть ли какая-то best practice для такого случая :


PD>В некоторой таблице должна быть одна и только одна запись.


PD>Например, table institute — запись об институте, название, адрес, реквизиты и т.д.

PD>Поскольку речь идет о БД данного института, запись должна быть одна и только одна.

PD>А в нем факультеты, значит table faculty с FK на institute. Ну и прочие таблицы — бухгалтерия, отдел кадров и т.д.


PD>Но эти FK всегда ссылаются на одну и ту же запись в institute, иначе и быть не может.

PD>Получается некоторая избыточность. Фактически этот FK есть константа, а зачем тогда он ?

PD>Ну и второй (несколько академический) вопрос. Как запретить создание второй записи в table institute ? Вариант сделать таблицу R/O не годится — первую строку должно быть можно изменять.


Сделай тригер который удалёет всё лишнее
А вообще просто писать в строку по фиксированному id
Re[2]: таблица со строго одной записью
От: Alex.Che  
Дата: 01.11.24 14:38
Оценка:
Здравствуйте, kov_serg, Вы писали:

PD>> Ну и второй (несколько академический) вопрос.

PD>> Как запретить создание второй записи в table institute ?
PD>> Вариант сделать таблицу R/O не годится — первую строку должно быть можно изменять.

_>Сделай тригер который удалёет всё лишнее


триггеры транзакционно-зависимы.
Re[2]: таблица со строго одной записью
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.11.24 02:03
Оценка:
Здравствуйте, Qt-Coder, Вы писали:

QC>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Ну и второй (несколько академический) вопрос. Как запретить создание второй записи в table institute ? Вариант сделать таблицу R/O не годится — первую строку должно быть можно изменять.

QC>Можно установить check constraint
QC>CREATE TABLE Persons (
QC> ID int NOT NULL,
QC> LastName varchar(255) NOT NULL,
QC> FirstName varchar(255),
QC> Age int,
QC> City varchar(255),
QC> CONSTRAINT CHK_ID CHECK (ID=1)
QC>);

QC>Это запретит создавать записи с ID <> 1

Большинство СУБД требуют уникальности от поля, на которое будет потом установлен foreign key.
Поэтому вот так:
CREATE TABLE Institutes(
ID int not null primary key, 
Name varchar(255) NOT NULL,
...,
CONSTRAINT CHK_ID CHECK (ID=1)
);

В будущем, когда всё же потребуется обслуживать несколько институтов, достаточно будет дропнуть 1 констрейнт.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.