Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535

Связывание таблиц не по первичному ключу

01.12.2017, 12:01. Показов 3605. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добры день. Помогите пожалуйста с связыванием двух таблиц.

Есть две таблице, страна и персона. Как мне объединить две таблице так чтобы к Person.Country_ID_2 был привязан Country.Country_ID.
Как привязать Country.ID, я знаю, но из за особенности задачи мне надо привязать именно Country.Country_ID

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE public.Country (
    "ID" bigserial NOT NULL PRIMARY KEY,
    "Country_ID" BIGINT NOT NULL,
    "Country_Name" VARCHAR(50) NOT NULL,
)
WITH (
    OIDS=FALSE
);
 
 
CREATE TABLE public.Person (
    "ID" bigserial NOT NULL PRIMARY KEY,
    "Country_ID_2" BIGINT NOT NULL,
    "Person_Name" VARCHAR(50) NOT NULL,
)
WITH (
    OIDS=FALSE
) ;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2017, 12:01
Ответы с готовыми решениями:

Фильтр по первичному ключу
Есть таблица Клиенты с полями. ID_CLIENT-ключевое поле. Нажимая на запись дабл кликом, открывается форма, где в текстбоксы...

Обращение к первичному ключу
Есть представление def post_detail(request, url_post): data = {} get_base_menu(data) data = get_object_or_404(Post,...

Ошибка: 607 Количество столбцов внешнего ключа не соответствует первичному ключу
Один из пунктов в задании к лабораторной работе: Добавить в операторы создания таблиц создание ограничений всех четырех видов. Каждая...

8
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
01.12.2017, 12:14
Цитата Сообщение от fufel Посмотреть сообщение
из за особенности задачи мне надо привязать именно Country.Country_ID
Чтобы можно было связать таблицы, поле должно иметь constraint Primary Key или Unique
0
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
01.12.2017, 12:45  [ТС]
Grossmeister, Вот в этом у меня и проблема. "Primary Key" в обоих таблицах у меня является ID. Но мне надо связать таблице не по Country.Country_ID который не является "Primary Key".
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
01.12.2017, 13:38
Цитата Сообщение от fufel Посмотреть сообщение
Вот в этом у меня и проблема
ОК. Начнем по порядку. Что в таблице Country содержит ID и что Country_ID? Является ли Country_ID уникальным? И для чего тебе нужна связь между этими двумя таблицами?
0
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
04.12.2017, 20:23  [ТС]
Grossmeister,
Добрый день, извиняюсь за задержку (работа работой но выходные по расписанию).

Дело в том что имеется некая закрытая БД с своей структурой но увидеть структуру и сделать копию БД не возможно (по политике безопасности).
Вот я и делаю так что по их ежедневным отчетом (которые разрешены) я заполняю свою таблицу.

Теперь о таблицах.
Country - Таблица всех стран.
ID - Уникальный ключ на моей стороне.
Country_ID - Уникальный ключ на их стороны (Но сразу считать всю их таблицу я не могу). Но ключ также уникальный.

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

Вот я и хочу сделать целостность БД опираясь на уникальные ID той БД, но на моей стороне их уникальные ID являются второстепенными ключами (Country.Country_ID и Person.Country_ID_2).

Вот как-то так.
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
05.12.2017, 12:02
По-моему, надо просто объединять по равнству Country.Country_ID и Person.Country_ID_2.
Вероятно, есть какие-то обстоятельства, которые этому мешают. Может быть, Вы расскажете именно о том, что препятствует такому объединению?

Добавлено через 6 минут
Пока я понял только, что Вы потихонечку выкачиваете данные через отчеты и помещаете эти данные в свои таблицы. Если у Вас возникают проблемы, то Вы, скорее всего, неправильно заносите данные в свои таблицы. Поэтому желательно понять, как именно Вы заполняете свои таблицы, и какие у Вас после этого получаются проблемы.
0
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
07.12.2017, 19:22  [ТС]
Добрый день, извиняюсь за задержку.
Вот нарисовал наглядную таблицу того что я имею ввиду.

Мне для целостности БД надо соединить два значения ID и Country_ID так чтобы на них весела целостность БД.
Эти значения берутся с оригинальной БД и тем самым значения не будут повторятся. Но как реалезовать такую целостность я не знаю.
Мой_ID я использовать не могу, поскольку мои ID и те ID которые находятся в оригинальной БД явно не будут совпадать.

Но всегда есть второй вариант, я копаю не в том направление и есть намного легче решение, но это решение я пока в притык не вижу.
Миниатюры
Связывание таблиц не по первичному ключу  
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
08.12.2017, 10:06
Цитата Сообщение от fufel Посмотреть сообщение
есть намного легче решение
Дело в том, что я, вообще-то, ораклист, поэтому многие проблемы PostGre мне непонятны. Если бы у меня была аналогичная задача, я, изначально, создал бы свои таблицы без первичного ключа. В Oracle такое возможно, а вот насчет PostGre - не знаю. Затем я заполнял бы свои таблицы оператором merge. В Oracle есть такой гибрид insert и update, который позволяет вставлять записи, если это "новые" записи по какому-то критерию новизны, и редактировать записи, если их "аналоги" уже есть (или вообще пропускать такие записи). Если в PostGre прямого аналога нет, всегда можно написать процедуру типа "условный оператор в цикле по курсору", что мы раньше и делали в Oracle. Вообще-то, оператору merge не очень мешает даже собственный первичный ключ, но я предпочитаю не плодить лишние сущности, тем более, если они мне не нужны.
Может быть, что-то, из сказанного выше, может Вам пригодиться?
0
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
08.12.2017, 11:24  [ТС]
AGK, Спасибо, идею ты мне подсказал очень хорошую, теперь буду искать и в этом направление
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2017, 11:24
Помогаю со студенческими работами здесь

Связывание таблиц
Возможно ли привязать к ключевому полю 1 таблицы несколько таблиц, через внешний ключ (например к полю id_personal(pk) 3 таблицы, у которых...

связывание таблиц
Возможно ли привязать к ключевому полю 1 таблицы несколько таблиц, через внешний ключ (например к полю id_personal(pk) главной таблицы...

Связывание таблиц
Добрый день всем, прошу помочь, пишу программу на Делфи (учет товара). Так вот на первой форме у меня таблица Грид а ней находится весь...

Связывание таблиц
Почитал много мануалов, покурил форумы. прочитал про индексы. Но так и не пойму как связать таблицы по полям id_marka- id таблица марка...

Связывание таблиц
Нужно связать таблицы так чтобы когда ты пишешь в одной таблицы что нибудь эта информация отображалась в другой таблице.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru