![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Grandpa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 24.7.2003 Где: Одесса Репутация: нет Всего: нет |
Пусть имеется две таблицы - Клиенты и Экспедиторы. Информация в них разная. Третья таблица Связь должна хранить списки телефонов для Клиентов и Экспедиторов. В ней есть поле Персона, в котором находится ключ либо к одной, либо к другой таблицы.
При такой схеме нарушается целостность данных. Я нашёл два варианта решения:
И то и другое решение кажутся мне корявыми. Первое множит количество таблиц (ещё есть Сотрудники, ОднократноПривлекаемые и т.п. и у всех есть телефоны ![]() Есть ли стандартный приём для решения таких проблем? Чуствую что есть, но хочется увидеть ![]() Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 1 Всего: 17 |
Клиенты:
( idClient PK fio CommunicationID FK ------>Связь(CommunicationID) ) Экспедиторы: ( idExpeditor PK fio CommunicationID FK ------>Связь(CommunicationID) ) Связь ( CommunicationID auto_increment PK PhoneNumber ) -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Grandpa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 24.7.2003 Где: Одесса Репутация: нет Всего: нет |
Прошу прошения, не понял ![]() По каким полям делается отношение (1 ко многим) между Клиентом (Экспедитором) и Связь ? |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 1 Всего: 17 |
а чего непонятного ? каждой записи в таблицах Клиенты Экспедиторы
соттветсвует много значений из таблицы Связь ![]() тем более что Клиенты: CommunicationID FK и Экспедиторы: CommunicationID FK будут конфликтовать Это сообщение отредактировал(а) Magnifico - 5.7.2008, 20:52 -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Grandpa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 24.7.2003 Где: Одесса Репутация: нет Всего: нет |
Для этого нужна такая структура Клиенты: ( idClient PK fio ) Экспедиторы: ( idExpeditor PK fio ) Связь ( CommunicationID auto_increment PK idClient _or_idExpeditor FK // Поле по которому устанавливается отношение один-ко-многим PhoneNumber ) Или я ошибаюсью. В чём? |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 1 Всего: 17 |
поля CommunicationID unique (если они совпадают с id клиета их их можно убрать),
ClientCommunicationID и ForwarderCommunicationID допускают null сколько таблиц столько и полей в таблице Communication
http://up.li.ru/files/2008/07/05/368869.GI...mmunication.GIF http://picthost.ru/viewer.php?file=mk9tu5qgmfdhmy2b1b.gif -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Grandpa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 24.7.2003 Где: Одесса Репутация: нет Всего: нет |
Вы просматривали рисунок в моём первом посте http://forum.vingrad.ru/act-Attach/type/post/id-1570470.html ? Обратите внимание, что связи "пунктирные", т.е. отключена проверка на целостность данных. Т.к. в поле person либо idClient, либо idForwarder, их значения разведены диапазоном.
Ваше решение тоже неплохое, но не кажется ли вам, что оно не согласуется с первой нормальной формой? Повторяющиеся поля. Да, я для простоты не указал ещё сотрудников фирмы, однократных заказчиков и т.п. Количество полей будет расти, расти... |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 1 Всего: 17 |
вводим родительское поле parentID - идентификатор таблицы
клиенты -1 экспедиторы 2 сотрудники 3 ......... недостатки: придется отключить целстность (проверять на уровне кода триггеры,процедуры, клиетский код) достоинства: минимум полей , свободный автоинкремент в каждой таблице запись идентфицируется по двум полям CommuncationID и ParentID http://ipicture.ru/Gallery/Viewfull/3148791.html
наверно все таки с третьей значения в ячейках атомарны и зависят от первичного ключа Это сообщение отредактировал(а) Magnifico - 6.7.2008, 09:05 -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Grandpa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 24.7.2003 Где: Одесса Репутация: нет Всего: нет |
Magnifico спасибо. Вы позволили мне определиться. Буду использовать Ваш подход (http://up.li.ru/files/2008/07/05/368869.GIF;communication.GIF). Думаю тема закрыта.
Ещё раз спосибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |