powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нелепый вопрос для опытных профессионалов
16 сообщений из 16, страница 1 из 1
Нелепый вопрос для опытных профессионалов
    #36252305
Microbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, помогите советом...

Занимаюсь проектированием структуры БД. В соответствие с предметной областью необходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям.
Из житейского опыта все мы знаем, что каждый конкретный адрес "прикреплен" к одному почтовому отделению (имеет один почтовый индекс). При этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу.
При проектировании БД для данной предметной части я создал соответственно 2 таблицы:
1 - Таблица адресов (A),
2 - Таблица почтовых отделений (P).
Каждая из них имеет свой целочисленный первичный ключ:
pk_A - для адресов, pk_P - для почтовых отделений.
Кроме полей описывающих характеристики каждой сущности (они сейчас не столь важны) каждая таблица имеет вторичные ключи с указанием на строку "соседней" таблицы. То есть таблица адресов имеет вторичный ключ fk_P с указанием на pk_P таблицы P. А таблица почтовых отделений имеет вторичный ключ fk_A с указанием на pk_A таблицы A.
То есть для каждого адреса хранится (может хранится) ссылка на почтовое отделение, за которым закреплен данный адрес. А для каждого почтового отделения хранится ссылка на его физический адрес.
Оба вторичных ключа NULL-допускающие (NULL если почтовое отделение для адреса, или адрес почты неизвестны или не указаны).
Вроде бы всё очевидно (на мой взгляд).

Проблема в том, что окружающие меня "специалисты" (и их большинство) увидев данные "перекрестные" ссылки утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. И хором настаивают на введение третьей "связующей" таблицы.
При этом с аргументацией их мнения дела обстоят не важно. Самый "достойный" их аргумент (и пожалуй единственный), что в этом случае не будет работать каскадное удаление. Я отвечаю, что оно в данном случае не столь важно и даже вредно. Предлагаемые схемы с третьей таблицей представляются мне лишь менее адекватно описывающими семантику описанных связей.

Народ, помогите! Рассудите нас. А то у меня возникают "тяжкие раздумья" - то ли я дурак и чего-то не понимаю в этой жизни, то ли... В общем помогите, выскажите своё мнение. Чем больше будет таких мнений, тем было бы полезней.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252321
Фотография Влом регистрироваться
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Microbit,

ИМХО, почтовое отделение может находиться на перекрестке 2-х улиц и иметь 2 адреса: например, Ленина, 20 и Маркса, 36.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252347
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сталкивался с тем, что порой одно отделение в полном составе уходит в отпуск и на это время адрес обслуживается другим отделением...
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252385
Microbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не хотелось бы, чтобы тема ушла несколько в сторону от желаемой. Дело в том, что предметная семантика связей адреса и почты не вызывает нареканий со стороны окружающих "специалистов". Это не вызывает споров, и с этим они в принципе согласились, что семантические связи исходя из необходимых требований предметной области именно такие, как я описал.
Споры возникают именно по реализации данной семантики.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252387
`ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или вообще за почтовым отделением закреплена "территория" :) - (от сих и до обеда).
второе
адрес может обслуживать и не одно отделение (редко - но может быть)
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252397
`ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на самом деле зависит не только от данных но и от того что требуется получить от этих данных.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252410
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сказал к тому, что в случае наличия таблицы связей можно организовать историчность (добавлением колонок "Дата с", "Дата по")
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252625
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MicrobitПри этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу
Вы про "полевую почту" слышали?

MicrobitПри проектировании БД для данной предметной части я создал соответственно 2 таблицы:
1 - Таблица адресов (A),
Хм... А что за сущность такая "Адрес"?
Почтовый адрес состоит из нескольких компонент (внутри страны): территориальное образование (республика, край, область) и его структурные единицы (район, округ), населенный пункт (город, поселок), улица (квартал), дом...
Каждую из этих компонент можно рассматривать как самостоятельную сущность.
Судя по вашему описанию, проектируемая система рассчитана на обслуживание одного населнного пункта...
Но даже в этом случае, рекомендую создать хотя бы справочник улиц (то есть отдельную таблицу для улиц), а в таблице адресов - внешний ключ на нее.
Microbit2 - Таблица почтовых отделений (P).
И что хранится в этой таблице, кроме кода почтового отделения и ссылки на его адрес?
В вашей структуре, надо полагать, есть еще таблицы для организаций и людей, чьи адреса лежат в "Таблице адресов". Почему почтовые отделения нельзя объединить с другими организациями?
Microbit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет.
Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252658
nosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторнеобходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям.
почтовые ящики П/Я вы собираетесь учитывать ?
и физические и юридические лица их широко используют.
причем вы можете арендовать несколько П/Я в разных П/О
для справки :
каждый П/Я имеет свой номер (ай-ди)
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252724
Microbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
`ёадрес может обслуживать и не одно отделение (редко - но может быть)
В смысле? В моей схеме несколько почтовых отделений могут ссылаться на одну строку адреса. А вот, чтобы адрес имел несколько почтовых индексов, я такого не встречал и не слышал, чтобы такое где-то использовалось.

tru55Я сказал к тому, что в случае наличия таблицы связей можно организовать историчность (добавлением колонок "Дата с", "Дата по")
Это бесспорно. В принципе вообще любую связь 1 ко многим можно "расширить и углубить" с добавлением "истории" и прочих "наворотов". Например должность для сотрудника можно хранить прямой ссылкой со строки сотрудника на строку должности, а можно с использованием дополнительной таблицы (таблиц) хранить историю изменения должностей. Всё зависит от прикладных задач автоматизируемой предметной области. Но до абсурда ведь тоже доводить не надо, наверное. Ведь можно, например, сделать привязку населенного пункта к региону (области в которой находится данный пункт) прямой ссылкой. А можно через дополнительную связующую таблицу с ведением истории на случай, если изменится территориальное деление и данный населенный пункт будет входить в другую область :)
В "моём" случае, повторюсь, задачи автоматизируемой предметной области не требуют дополнительных "наворотов" и это не является предметом дискуссии с нашими "специалистами". Дискутируется именно реализация описанной семантики связей. И оппонирующая сторона "напирает" именно на якобы имеющиеся технические сложности и проблемы реализации этого варианта.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252805
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Microbit, исходную задачу опишите. Предложенный вами вариант реализации не позволяет ее воспроизвести.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252871
Microbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baracsMicrobitПри этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу
Вы про "полевую почту" слышали?

Издеваетесь, да? :) А у людей "трагедия"...

baracsMicrobitПри проектировании БД для данной предметной части я создал соответственно 2 таблицы:
1 - Таблица адресов (A),
Хм... А что за сущность такая "Адрес"?
Почтовый адрес состоит из нескольких компонент (внутри страны): территориальное образование (республика, край, область) и его структурные единицы (район, округ), населенный пункт (город, поселок), улица (квартал), дом...
Каждую из этих компонент можно рассматривать как самостоятельную сущность.
Судя по вашему описанию, проектируемая система рассчитана на обслуживание одного населнного пункта...
Но даже в этом случае, рекомендую создать хотя бы справочник улиц (то есть отдельную таблицу для улиц), а в таблице адресов - внешний ключ на нее.

:) Да на самом деле так всё и сделано. Есть и области, и районы, и населенные пункты, и улицы. Всё в отдельных таблицах. Таблица адресов - это лишь конечный "листик" этого "дерева", конечный узел. Я просто не стал здесь это описывать, как не имеющее принципиального значения для существа вопроса. А так - конечно, всё это есть, а строка в таблице адресов просто уже определяет конкретный почтовый адрес, для которого должен быть определен почтовый индекс (почтовое отделение).

baracsMicrobit2 - Таблица почтовых отделений (P).
И что хранится в этой таблице, кроме кода почтового отделения и ссылки на его адрес?
В вашей структуре, надо полагать, есть еще таблицы для организаций и людей, чьи адреса лежат в "Таблице адресов". Почему почтовые отделения нельзя объединить с другими организациями?

Пока достаточно почтового индекса и физического адреса. Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации. Иначе, конечно, можно было бы с почты сделать ссылку на таблицу организаций.

baracsMicrobit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет.
Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите.

Да ничего "особливого"...
Всё что нужно, это для каждого адреса иметь возможность задавать и получать почтовый индекс и физический адрес почтового отделения. И, соответственно, наоборот... Для конкретного почтового индекса (почтового отделения) получить список "прикрепленных" к нему адресов.

nosovавторнеобходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям.
почтовые ящики П/Я вы собираетесь учитывать ?
и физические и юридические лица их широко используют.
причем вы можете арендовать несколько П/Я в разных П/О
для справки :
каждый П/Я имеет свой номер (ай-ди)

Нет, это не требуется.
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252935
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может просто взять КЛАДР :)
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36252995
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Microbit Да на самом деле так всё и сделано. Есть и области, и районы, и населенные пункты, и улицы. Всё в отдельных таблицах. Таблица адресов - это лишь конечный "листик" этого "дерева", конечный узел. Я просто не стал здесь это описывать, как не имеющее принципиального значения для существа вопроса. А так - конечно, всё это есть, а строка в таблице адресов просто уже определяет конкретный почтовый адрес, для которого должен быть определен почтовый индекс (почтовое отделение).
Интересно, что еще вы посчитали не имеющим принципиального значения для существа вопроса?
Вопрос остался: зачем вам этот "конечный узел"?


Microbit Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации.
Смысл этой фразы от меня ускользнул.

MicrobitbaracsMicrobit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет.
Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите.
Да ничего "особливого"...
Всё что нужно, это для каждого адреса иметь возможность задавать и получать почтовый индекс и физический адрес почтового отделения. И, соответственно, наоборот... Для конкретного почтового индекса (почтового отделения) получить список "прикрепленных" к нему адресов.
Проблем с получением того и другого я не вижу, но, сдется, вы опять чего-то не договариваете...
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36253206
Microbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baracsВопрос остался: зачем вам этот "конечный узел"?
Этот "конечный узел" может быть связан с другими сущностями (людьми, организациями) в соотношении "многие ко многим".

baracsMicrobit Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации.
Смысл этой фразы от меня ускользнул.
От "почтовых отделений" требуется только их почтовый индекс и физический адрес, как контрагенты по реализуемой бизнес логике они не выступают.

baracsПроблем с получением того и другого я не вижу, но, сдется, вы опять чего-то не договариваете...
Естественно "не договариваю". А "не договариваю" я полного описания всей предметной области и бизнес логики всей системы...
...
Рейтинг: 0 / 0
Нелепый вопрос для опытных профессионалов
    #36254584
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MicrobitЗанимаюсь проектированием структуры БД. В соответствие с предметной областью необходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям.
Из житейского опыта все мы знаем, что каждый конкретный адрес "прикреплен" к одному почтовому отделению (имеет один почтовый индекс). При этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу.
При проектировании БД для данной предметной части я создал соответственно 2 таблицы:
1 - Таблица адресов (A),
2 - Таблица почтовых отделений (P).
Каждая из них имеет свой целочисленный первичный ключ:
pk_A - для адресов, pk_P - для почтовых отделений.
Кроме полей описывающих характеристики каждой сущности (они сейчас не столь важны) каждая таблица имеет вторичные ключи с указанием на строку "соседней" таблицы. То есть таблица адресов имеет вторичный ключ fk_P с указанием на pk_P таблицы P. А таблица почтовых отделений имеет вторичный ключ fk_A с указанием на pk_A таблицы A.
То есть для каждого адреса хранится (может хранится) ссылка на почтовое отделение, за которым закреплен данный адрес. А для каждого почтового отделения хранится ссылка на его физический адрес.
Оба вторичных ключа NULL-допускающие (NULL если почтовое отделение для адреса, или адрес почты неизвестны или не указаны).
Вроде бы всё очевидно (на мой взгляд).

Проблема в том, что окружающие меня "специалисты" (и их большинство) увидев данные "перекрестные" ссылки утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. И хором настаивают на введение третьей "связующей" таблицы.
При этом с аргументацией их мнения дела обстоят не важно. Самый "достойный" их аргумент (и пожалуй единственный), что в этом случае не будет работать каскадное удаление. Я отвечаю, что оно в данном случае не столь важно и даже вредно. Предлагаемые схемы с третьей таблицей представляются мне лишь менее адекватно описывающими семантику описанных связей.По-видимому, всё-таки не вторичные ключи, а внешние ?
Делайте так, как считаете нужным. С практической точки зрения выглядит Ваше решение выглядит вполне убедительно. Насколько я понял из первого топика, любое почтовое отделение имеет адрес(либо он неизвестен), и каждый адрес обслуживается каким-либо почтовым отделением(либо оно неизвестно). Из этого ясно, что здесь получается не одна классическая связь типа M:N со стандартным решением в виде развязки промежуточной таблицей, а две, вполне различные по семантике, связи. Одна 1:M(ПО->обслуживает->Адрес) и вторая 1:1(ПО->имеет->Адрес). Смешивать их в некоей одной промежуточной таблице не выглядит разумным решением. В таком случае для комбинаций (ПО,Адрес) понадобиться отличать адрес, который имеет ПО, от адреса, которое оно обслуживает в случае их совпадения. Для этого придется в такую таблицу добавлять поле, которое позволить описать это различие. IMO, разные по смыслу связи правильнее хранить в разных таблицах, а не запихивать все в одну с добавлением специальных атрибутов для их различения.
В случае нескольких адресов на одно ПО, из таблицы ПО ссылку на адрес надо будет исключить и добавить промежуточную таблицу, в которой будут перечислены ссылки на все возможные адреса для каждой ссылки на ПО. Причем, возможно, стоит рассмотреть возможность нахождения двух или более разных ПО по одному и тому же адресу.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нелепый вопрос для опытных профессионалов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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