powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальность записи.
25 сообщений из 30, страница 1 из 2
Уникальность записи.
    #33180153
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица о двух полях типа int. Связь. Поля зависят оба от внешнего ключа другой таблицы (одного и тогоже). Но как проверить уникальность? Ну чтоб нельзя было вставить туж самую запись. Каждое поле в отдельности может повторятся скока угодно раз. Но чтоб ИМЕННО записи различались.

ЗЫ: народ, не отсылайте к доке. У меня книжку хорошую хулиган отобрал. Вернёт не скоро. Англицкий я не знаю. А ответ нужен как можно быстрее.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33180182
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin wrote:
> Таблица о двух полях типа int. Связь. Поля зависят оба от внешнего ключа
> другой таблицы (одного и тогоже). Но как проверить уникальность? Ну чтоб
> нельзя было вставить туж самую запись. Каждое поле в отдельности может
> повторятся скока угодно раз. Но чтоб ИМЕННО записи различались.
>
> ЗЫ: народ, не отсылайте к доке. ...
> Англицкий я не знаю.
"учиться, учиться, и еще раз учиться" (с) Ульянов
"век живи, век учись - дураком умрешь" (с) народное
> А ответ нужен как можно быстрее.
alter table mytabale add constraint cn_uniq_f1_f2 unique (field1, field2);
- стандартный SQL :)
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Уникальность записи.
    #33180223
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33180782
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача усложнилась.
Допустим есть запись 5|3
Можноль без триггера запретить вставлять не только 5|3, но и 3|5?
...
Рейтинг: 0 / 0
Уникальность записи.
    #33180815
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posmotrite v storonu "CHECK" pri sozdanii tablicy, ili dobavit' cherez ALTER, tochno sintaksis ne pomnju, no regexp byl ves'ma interesen.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33181017
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
? а при чём тут pegexp? У меняж int. Оба поля.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33181077
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица о двух полях типа int. Связь. Поля зависят оба от внешнего ключа другой таблицы (одного и тогоже). Но как проверить уникальность? Ну чтоб нельзя было вставить туж самую запись. Каждое поле в отдельности может повторятся скока угодно раз. Но чтоб ИМЕННО записи различались.

вам не кажется странным такая постановка задачи?

что хочется получить в конечном итоге? (для чего это надо?)
...
Рейтинг: 0 / 0
Уникальность записи.
    #33181141
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача была сделать ограничение, не позволяющее два раза вставить одинаковую запись.
Например есть у нас 3|5. Так вот чтоб второй раз 3|5 вставить было нельзя.
Но после того как я оптимизировал запрос понадобилось запретить вставлять не только 3|5, но и 5|3.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33181174
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет я имел ввиду почему именно такая таблица (2 колонки зависят от 1)

мне кажется гдето ошибка именно в схеме таблиц и все что вы спрашиваете это полная ерунда поскольку это все костыли а не решение проблемы
...
Рейтинг: 0 / 0
Уникальность записи.
    #33181702
Фотография osse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЗадача была сделать ограничение, не позволяющее два раза вставить одинаковую запись.
Например есть у нас 3|5. Так вот чтоб второй раз 3|5 вставить было нельзя.
Но после того как я оптимизировал запрос понадобилось запретить вставлять не только 3|5, но и 5|3.

Код: plaintext
alter table mytabale add constraint check_f1_f2 check (f1 > f2)

Или что-то в этом духе, по обстоятельствам.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33183786
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrнет я имел ввиду почему именно такая таблица (2 колонки зависят от 1)

мне кажется гдето ошибка именно в схеме таблиц и все что вы спрашиваете это полная ерунда поскольку это все костыли а не решение проблемы
Есть сущность улица. Улица может граничить с другой улицей. Соответственно естли у1 граничит с у2, то и у2 граничит с у1. Запрос на выборку это учитывает и если есть такие записи:
3|5
5|6
5|2
8|5
то запрос на выборку улиц, граничащих с 5 выдаст 3, 6, 2 и 8. Задача CHECK - обеспечить проверку на избыточность. Если есть записи 3|5 и 5|3, то это для селекта не фатально. Он берёт дистинкт. Но избыточность заставляет меня нервноворочатся по ночам. А CHECK спасёт если он поддерживает вложенные запросы. Например можноль такой алгоритм реализовать:
если пытаются вставить f1, f2 и (f1,f2) уникальны, то проверить есть ли запись f2,f1?
...
Рейтинг: 0 / 0
Уникальность записи.
    #33183798
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задам еще 1 вопрос для того чтобы до конца понять чего вам хочется :-)

пока не берем во внимание (так называемую) избыточность все есть как есть

улица 1 и к ней 2,3,4
улица 2 и к ней 1,3,5
улица 3 и к ней 1,2,8

получается
1|2
1|3
1|4
2|1
2|3
2|5
3|1
3|2
3|8

данные у нас есть какой результат нужно получить?
те как я понимаю это нужно каким нибудь пользователям что они хотят получить в конечном итоге зная например номер улицы?
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184065
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может быть, я не правильно понял, но сдается мне, что тут описывается неориентированный граф. если это так, то описывать вершины текстом в виде "n|m", вообще говоря, не правильно.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184069
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пардон, действиетльно, не правильно понял по поводу текстовых полей :(
в любом случае, тут остается именно неориентированный граф. не пробовал ставить exists в check, но, по идее, это должно прокатить.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184106
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу прощения за флуд.
проверил на 7.4 - check(exists(....)) ставить не разрешает. видимо, без триггера тут не обойтись. к тому же, триггер чем приятнее, что он может не вызывать эксепшен, а просто не вставлять запись, если она нарушает уникальность
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184141
Фотография osse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХА, check (f1 < f2) катит лучше всего:
граф неориентированный без петель => его матрица смежности симметричная => таблице нужно хранить только ее "верний треугольник" => элементы f1 и f2 таблицы "Смежность"(f1,f2) должны удовлетворять (f1 < f2)
#
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184580
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушайте, а ведь это гениально. Я сначала не врубился как будет check(f1 < f2) работать.

А сейчас понял.

Пользователь при добавлении границы между улицами будет извещён о том, что первым полем должна вставляца младшая улица (с меньшим UID). И границы между 3 и 5 можно будет вставить только как 3|5.

Спасибо всем большое.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184596
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrзадам еще 1 вопрос для того чтобы до конца понять чего вам хочется :-)

пока не берем во внимание (так называемую) избыточность все есть как есть

улица 1 и к ней 2,3,4
улица 2 и к ней 1,3,5
улица 3 и к ней 1,2,8

получается
1|2
1|3
1|4
2|1
2|3
2|5
3|1
3|2
3|8

данные у нас есть какой результат нужно получить?
те как я понимаю это нужно каким нибудь пользователям что они хотят получить в конечном итоге зная например номер улицы?
А теперь я хочу для конкретной улицы получить список улиц на которые с неё перейти могу.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184746
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для удобства выборки и для полноты картины не стоит выкидывать данные

я например не считаю избыточным поле 2|1 если у меня есть поле 1|2

максимум что вы сэкономите это место на харде, а получите усложненный запрос и неполные данные

вдруг вам понадобится направление? если это например карта автомобильная москвы. может у улицы одностореннее движение и с нее можно съехать а на нее заехать нельзя.

так что я бы не стал разбрасываться данными так бездумно
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184838
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vfabrдля удобства выборки и для полноты картины не стоит выкидывать данные

я например не считаю избыточным поле 2|1 если у меня есть поле 1|2

максимум что вы сэкономите это место на харде, а получите усложненный запрос и неполные данные

вдруг вам понадобится направление? если это например карта автомобильная москвы. может у улицы одностореннее движение и с нее можно съехать а на нее заехать нельзя.

так что я бы не стал разбрасываться данными так бездумнобоюсь, в таком случае придется при каждом инсерте/делите добавлять/удалять встречные направления и проверять уникальность/целостность
SarinА теперь я хочу для конкретной улицы получить список улиц на которые с неё перейти могу.запрос по улицам на которые можно попасть с данной union all запрос по улицам с которых можно попасть на данную. или вариации, как "или" в where
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184853
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕсть сущность улица. Улица может граничить с другой улицей.Имеется в виду перекресток? А более двух улиц могут пересекаться в одном и том же перекрестке? А две улицы могут пересекаться друг с другом в двух разных перекрестках? Просто так спросил. :)
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184857
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2vfbar:
пардон, опять не подумавши ответил %) согласен, можно оставить и чуть усложнить запрос.
другое дело, что алгоритм заполнения этой таблицы может не учитывать направление ребра графа ;))))) может, там просто передается неупорядоченная пара улиц ;))
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184868
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat SarinЕсть сущность улица. Улица может граничить с другой улицей.Имеется в виду перекресток? А более двух улиц могут пересекаться в одном и том же перекрестке? А две улицы могут пересекаться друг с другом в двух разных перекрестках? Просто так спросил. :)уверен на 100%, что могут и, скорее всего, в задаче это потребуется. а в плане представления в базе это все "по модулю" ;)) как был граф - так и остался ;)))))
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184913
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat SarinЕсть сущность улица. Улица может граничить с другой улицей.Имеется в виду перекресток? А более двух улиц могут пересекаться в одном и том же перекрестке? А две улицы могут пересекаться друг с другом в двух разных перекрестках? Просто так спросил. :)
понятно, что спросил не просто так, а сыршенно прально,,, Но...

уллицы воопще бывают странные.
Вот есть в знакомом мне городке вулица... скажем "А", так вот тут - дома улицы А, и там - тоже дома улицы А, а промеж них - проезжая часть и рядок домов вообще даже улицы Б. И вроде бы как у "улицы" А и нет никакой проезжей части (или она где-то в другом месте), и нет никаких перекрестков с улицей Б. А меж тем они, эти А и Б - смежны домами. И модель улиц как неких линий или проспектов с перекрестками в случае упомянутой улицы А не проканывает.
...
Рейтинг: 0 / 0
Уникальность записи.
    #33184932
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat SarinЕсть сущность улица. Улица может граничить с другой улицей.Имеется в виду перекресток? А более двух улиц могут пересекаться в одном и том же перекрестке? А две улицы могут пересекаться друг с другом в двух разных перекрестках? Просто так спросил. :)
Не важно в каком месте они пересекаются. Абсолютно. Важен факт того, что с улицы а можно перейти на улицу б. При этом возможность перехода с а на б подразумевает обязательную возможность перехода с б на а. Карта не автомобильная. Исключительно пешеходная.

Вот запрос если кому интрересно:
Код: plaintext
SELECT DISTINCT strit.id, strit.name from strit, strit_border WHERE ((strit_border.border_strit_id = strit.id) OR (strit_border.strit_id = strit.id)) AND ((strit_border.strit_id = $_SESSION[streat]) OR (strit_border.border_strit_id = $_SESSION[streat])) AND (strit.id <> $_SESSION[streat]);
Это из пхп. $_SESSION[streat] - улица на которой товарищь находится. Теперь я смогу избавится от дистинкта. Почему я не боюсь избыточности? Сами понимаете, дело не в месте на винте. Всё проще. Вышеописанный запрос избавит от опасной трудности, что администратор добавил 3|5 и забыл про 5|3. Человек зашёл на пятую с третьей. А назад уже никак:)

ЗЫ: вообще-то онлайн-игру делаем:)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальность записи.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]