
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
23.10.2013, 22:40
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
Здравствуйте. При проектировании бд возникла небольшая проблема. Есть код акции - oid. Каждая акция содержит определенные наборы продуктов - pid. Каждый набор продуктов содержит комплекты для каждого автомобиля с определенным кодом - reference. И есть три таблицы - offers (акции), products (список продуктов, где код акции является внешним ключом) и есть таблица references (где продукт установлен в качестве внешнего ключа). Название продуктов не уникально. В таблице references на время сделал еще и ключ с oid. И это в частности является следствием проблемы, которую многие уже скорее всего поняли. Проблема в том, что я не знаю, как связать код продукта и акции. Сейчас получается, что в рефер можно добавить код одной акции, а продукт выбрать из другой. Нарушается целостность. Как сделать так, чтобы при выборе предложения в пид можно было выбирать продукты только из выбранного предложения (фактически я имею ввиду, чтобы запись в базу шла только в том случае, если продукт содержится в выбранном предложении). А в таблицу реферов я добавил пид и оид только потому, что если два продукта по названию совпадают, то при записи и дальнейшем просмотре не понятно к какому предложению относится продукт. Еще хотелось бы добавить то, что все данные из этих таблиц вводятся и выводятся через форму. В начале человек вводит код акции, потом вылезает список продуктов (можно выбрать один) по акции, после выбора продуктов вылезает список референсов (можно выбрать несколько) и далее происходит запись в таблицу coupons(купоны). Таблица содержит код акции, выбранный продукт и список выбранных референсов. Ну и еще много полей, которые не имеют отношения к проблеме и в данном контексте второстепенны. Помогите решить данную проблему, пожалуйста. Очень хочется сохранить целостность данных. Внизу, для наглядности, скрин. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.10.2013, 23:23
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
stp008А в таблицу реферов я добавил пид и оид только потому, что если два продукта по названию совпадают, то при записи и дальнейшем просмотре не понятно к какому предложению относится продукт. Будет понятно если ты отобразишь информацию в виде дерева: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.10.2013, 23:52
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
67 + Амортизаторы передние(Дубль раз) + 78787878 (это закодированные где-то там цены с указанием модели. Будем считать, что все реферы уникальные и данный рефер представляет, например, амортизатор на бмв, следующий на опель и т.д.) + 78878787 + Амортизаторы задние + 67553343 + 56543434 68 + Амортизаторы передние(Дубль два) +78776556 +65656576 +67686867 + Рулевые тяги +78665675 +57575786 +68687668 + Крыло +887676767 +787878788 69 +Рейка +76555555 +55575757 +Крыло +89786555 +44454654 Приблизительно такое дерево. Надеюсь это то, что вы просили) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.10.2013, 23:55
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 00:03
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
stp008Надеюсь это то, что вы просили) Я ничего не просил, это у тебя проблема как отобразить в программе структуру данных без избыточности. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 00:12
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
Dimitry Sibiryakov, там нет избыточности. амортизаторы передние это два разных продукта, которые содержат разные референсы. Проблема в их имени. А точнее в том, что оно одинаковое. Автоматическое добавление префикса предложения при записи решит проблему? Например, Предл1_Продукт1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 00:15
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
stp008Проблема в их имени. А точнее в том, что оно одинаковое. Автоматическое добавление префикса предложения при записи решит проблему? А то, что они визуально висят в разных узлах дерева (одни в 67, а другие в 68) Вам недостаточно? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 00:27
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
Dimitry Sibiryakov, а куда их можно повесить еще? Это же два УНИКАЛЬНЫХ продукта. Их содержание разное. Коротко говоря, как не дать записать в эту таблицу продукт, который не относится к предложению (предложение - это число, а строка - продукт). Убрать oid (предложения) из таблицы референсов и дать pid (продукт) уникальные значения (используя автоматически добавляемый префикс) вроде должно решить проблему. Так правильно делать вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 00:29
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
Как не дать записать, допустим, рулевые тяги (которые находятся в предложении 68) в предложение 67. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.10.2013, 01:47
|
|||
|---|---|---|---|
|
|||
Связать два внешних ключа вместе |
|||
|
#18+
stp008Как не дать записать, допустим, рулевые тяги (которые находятся в предложении 68) в предложение 67. В таблице products только одна ссылка на на offers, так что технически невозможно записать "рулевые тяги" в два предложения сразу. У тебя в таблице products будут две записи "рулевые тяги", ссылающиеся на разные записи в offers. И это будут две совершенно разные рулевые тяги у которых общее только написание названия. Или же ты нарушил третью НФ и должен будешь добавить ещё одну таблицу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&tablet=1&tid=1541087]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 268ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...