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

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

01.12.2017, 12:01. Показов 3567. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru