powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связать два внешних ключа вместе
11 сообщений из 11, страница 1 из 1
Связать два внешних ключа вместе
    #38439079
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. При проектировании бд возникла небольшая проблема. Есть код акции - oid. Каждая акция содержит определенные наборы продуктов - pid. Каждый набор продуктов содержит комплекты для каждого автомобиля с определенным кодом - reference. И есть три таблицы - offers (акции), products (список продуктов, где код акции является внешним ключом) и есть таблица references (где продукт установлен в качестве внешнего ключа). Название продуктов не уникально. В таблице references на время сделал еще и ключ с oid. И это в частности является следствием проблемы, которую многие уже скорее всего поняли.

Проблема в том, что я не знаю, как связать код продукта и акции. Сейчас получается, что в рефер можно добавить код одной акции, а продукт выбрать из другой. Нарушается целостность. Как сделать так, чтобы при выборе предложения в пид можно было выбирать продукты только из выбранного предложения (фактически я имею ввиду, чтобы запись в базу шла только в том случае, если продукт содержится в выбранном предложении). А в таблицу реферов я добавил пид и оид только потому, что если два продукта по названию совпадают, то при записи и дальнейшем просмотре не понятно к какому предложению относится продукт.

Еще хотелось бы добавить то, что все данные из этих таблиц вводятся и выводятся через форму. В начале человек вводит код акции, потом вылезает список продуктов (можно выбрать один) по акции, после выбора продуктов вылезает список референсов (можно выбрать несколько) и далее происходит запись в таблицу coupons(купоны). Таблица содержит код акции, выбранный продукт и список выбранных референсов. Ну и еще много полей, которые не имеют отношения к проблеме и в данном контексте второстепенны.

Помогите решить данную проблему, пожалуйста. Очень хочется сохранить целостность данных. Внизу, для наглядности, скрин. Заранее спасибо.

...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439107
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stp008А в таблицу реферов я добавил пид и оид только потому, что если два продукта
по названию совпадают, то при записи и дальнейшем просмотре не понятно к какому
предложению относится продукт.
Будет понятно если ты отобразишь информацию в виде дерева:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Предложение 1
  + Продукт 1
    + рефер 1
    + рефер 2
  + Продукт 2
    + рефер 1
    + рефер 2
Предложение 2
  + Продукт 1
  + Продукт2

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439129
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
67
+ Амортизаторы передние(Дубль раз)
+ 78787878 (это закодированные где-то там цены с указанием модели. Будем считать, что все реферы уникальные и данный рефер представляет, например, амортизатор на бмв, следующий на опель и т.д.)
+ 78878787
+ Амортизаторы задние
+ 67553343
+ 56543434
68
+ Амортизаторы передние(Дубль два)
+78776556
+65656576
+67686867
+ Рулевые тяги
+78665675
+57575786
+68687668
+ Крыло
+887676767
+787878788
69
+Рейка
+76555555
+55575757
+Крыло
+89786555
+44454654

Приблизительно такое дерево. Надеюсь это то, что вы просили)
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439134
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
67 
 + Амортизаторы передние(Дубль раз)
  + 78787878 (это закодированные где-то там цены с указанием модели. Будем считать, что все реферы уникальные и данный рефер представляет, например, амортизатор на бмв, следующий на опель и т.д.)
  + 78878787
 + Амортизаторы задние
  + 67553343
  + 56543434
68
 + Амортизаторы передние(Дубль два)
  +78776556
  +65656576
  +67686867
 + Рулевые тяги
  +78665675
  +57575786
  +68687668
 + Крыло
  +887676767
  +787878788
69
 +Рейка
  +76555555
  +55575757
 +Крыло
  +89786555
  +44454654
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439143
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stp008Надеюсь это то, что вы просили)
Я ничего не просил, это у тебя проблема как отобразить в программе структуру данных без
избыточности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439148
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

там нет избыточности. амортизаторы передние это два разных продукта, которые содержат разные референсы. Проблема в их имени. А точнее в том, что оно одинаковое. Автоматическое добавление префикса предложения при записи решит проблему? Например, Предл1_Продукт1.
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439151
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stp008Проблема в их имени. А точнее в том, что оно одинаковое. Автоматическое
добавление префикса предложения при записи решит проблему?
А то, что они визуально висят в разных узлах дерева (одни в 67, а другие в 68) Вам
недостаточно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439160
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, а куда их можно повесить еще? Это же два УНИКАЛЬНЫХ продукта. Их содержание разное.
Коротко говоря, как не дать записать в эту таблицу продукт, который не относится к предложению (предложение - это число, а строка - продукт).

Убрать oid (предложения) из таблицы референсов и дать pid (продукт) уникальные значения (используя автоматически добавляемый префикс) вроде должно решить проблему. Так правильно делать вообще?



...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439163
stp008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как не дать записать, допустим, рулевые тяги (которые находятся в предложении 68) в предложение 67.
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439188
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stp008Как не дать записать, допустим, рулевые тяги (которые находятся в предложении
68) в предложение 67.
В таблице products только одна ссылка на на offers, так что технически невозможно записать
"рулевые тяги" в два предложения сразу. У тебя в таблице products будут две записи
"рулевые тяги", ссылающиеся на разные записи в offers. И это будут две совершенно разные
рулевые тяги у которых общее только написание названия. Или же ты нарушил третью НФ и
должен будешь добавить ещё одну таблицу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связать два внешних ключа вместе
    #38439304
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stp008,

У вас 3 сущности, выстроенные в строгую иерархию. Каждая имеет свой ИД.
1 не на что не ссылается
2 ссылается на 1
3 ссылается на 2
число уровне можно увеличит по аналогии
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связать два внешних ключа вместе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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