Задавайте вопросы, мы ответим
Вы не зашли.
Имеется проект, который необходимо сделать в oracle forms ко всему прочему. Есть база клиентов, включая фамилию, имя, отчество, номер телефона итд. Есть база товаров, тоже с различными характеристиками. Собственно вопрос вот в чём: Как сделать так что бы можно было взять несколько столбцов из первой таблицы (фамилия имя отчество и например номер телефона) и несколько столбцов из второй (наименование товара, материал изготовления, вес) и что бы всё это можно было вставить в третью таблицу, в которой суммарно и будет это всё отображаться, т.е данные клиента и данные о покупке.
Можно на уровне базы данных, если сможете подсказать как это всё в oracle forms засунуть вообще шикарно будет. Сколько читал не могу никак понять логику этих баз данных, первичных ключей, внешних ключей, вторичных, запутано всё до жути просто.
Если кто нибудь будет согласен помочь с проектом целиком, буду очень признателен, способ связи подберём.
Отредактированно mdma (01.03.2017 12:58:06)
Неактивен
По oracle forms здесь вряд ли сильно посоветуют (или спецы по ним прячутся и мы о них не знаем).
По базе - Вам наверное view нужно? То есть, третья таблица - там данные только на чтение или на изменение/удаление/добавление тоже?
Приведите структуру первых двух таблиц, тестовые данные и, самое главное, что должно отображаться в третьей таблице.
Первичные ключи и вторичные ключи не столь страшны, как кажутся )), давайте пока чисто про данные.
Неактивен
Структура такая.
Первая таблица Клиенты - Идентификатор, Фамилия, Имя, Отчество, Номер телефона
Вторая таблица Товары - Идентификатор, Наименование, Вес, Цвет
Третья таблица Покупки - Идентификатор клиента, Фамилия, Имя, Номер телефона | Идентификатор товара, Наименование, дата покупки (это поле должно вводится вручную).
Я бы привёл код таблиц которые создал (они на ноутбуке на работе), но там всё по стандарту, ничего особенного, просто перечень столбцов и типов данных, с ключами я так и не разобрался.
Как вариант можно сделать так что бы в третью таблицу вводились вручную только идентификаторы клиента и товара и дата покупки, и всё это тело записывалось в отдельную таблицу (в третью всмысле) но там отображались именно нормальные для восприятия данные, т.е перечень столбцов.
На самом деле я пока думаю еще как лучше это сделать, и как вообще такое обычно делается, просто недавно стал изучать oracle и пока не врубаюсь в архитектуру БД до конца.
Неактивен
Вы так и не ответили, третья таблица - это вьюшка (то есть только на чтение) или же полноценная таблица.
Неактивен
Третья таблица должна быть доступна и для чтения и для редактирования (например если клиент отказался от товара что бы была возможность его из неё удалить). Т.е эта таблица должна хранить суммарную информацию о покупке, её должно быть возможно прочитать, данные там должны хранится постоянно, но так же должна быть возможность редактирования.
Неактивен
Теперь понятней .
Первичным ключом в таблице Клиентов логичней сделать Идентификатор, с таблицей товаров также.
В таблице покупок будут соответственно два вторичных ключа - Идентификатор клиента и Идентификатор товара. Типы данных у mysql и у oracle разные, поэтому тут не получится подсказать.
Неактивен
mdma написал:
Как сделать так что бы можно было взять несколько столбцов из первой таблицы (фамилия имя отчество и например номер телефона) и несколько столбцов из второй (наименование товара, материал изготовления, вес) и что бы всё это можно было вставить в третью таблицу, в которой суммарно и будет это всё отображаться, т.е данные клиента и данные о покупке.
Ну как, sql-запросами на уровне БД это делается.
SELECT id,name,surname,patronymic,phone FROM client WHERE необходимое условие;
SELECT id,goods_name,... FROM goods WHERE необходимое условие;
и далее вставить в таблицу с покупками.
INSERT INTO transactions(client_id,goods_id,datetime) values (...);
При этом в таблицу покупок не нужно вставлять имя, фамилию и прочие данные о клиенте (как и сопутствующую информацию о товаре), туда нужно только id клиента и id товара (ну и время покупки, видимо )
Неактивен
Ну в том то и дело что мне кажется id будет не достаточно. Проверьте вашу почту пожалуйста, может быть вам всё еще понятнее станет)
Неактивен
На почту я ответил, общение по треду ведется в форуме. Почему id кажется недостаточным?
Давайте говорить предметно - прикладывайте структуру табличек, тестовые данные (только в mysql-варианте, oracle нет возможности использовать ). В идеале - создайте пример на sqlfiddle.com
(там, кстати, oracle есть в списке, посмотрите на http://sqlfiddle.com/#!9/ae8b4 и сделайте похожее ).
Неактивен
Ресурс которые вы мне дали у меня подтормаживал в браузере, я сделал на http://pastebin.com/WaXBG6Fm С mysql работал еще меньше чем с oracle, но надеюсь общую мысль донёс.
Отредактированно mdma (02.03.2017 15:17:24)
Неактивен
Ага, ок, добавьте еще несколько строчек с тестовыми данными во все таблицы и можно колдовать с запросами.
insert into clients values('Иванов Иван',..);
...
insert into product values('Терминатор');
.....
и insert into orders
и я покажу Вам, что хранить ФИО клиента совершенно не нужно в таблице orders, потому что оно уже содержится в таблице clients.
В таблице clients добавьте вторичный ключ на поле id_client чтобы ссылался на поле id таблицы client
также
в таблице orders добавьте вторичный ключ на поле id_client чтобы ссылался на поле id таблицы order
этого от Вас явно ожидают.
sqlfiddle нетороплив, но там можно прямо выполнять запросы. Так что лучше на него переезжайте.
Неактивен
В таблице clients добавьте вторичный ключ на поле id_client чтобы ссылался на поле id таблицы client также в таблице orders добавьте вторичный ключ на поле id_client чтобы ссылался на поле id таблицы order написал:
А на что тогда ссылаться id_product ? Ведь помимо ФИО в третьей таблице будет еще и id товара...
И для чего добавлять еще текстовые поля? Чем их потом заполнять?
Отредактированно mdma (02.03.2017 18:05:03)
Неактивен