|
|
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Народ, помогите советом... Занимаюсь проектированием структуры БД. В соответствие с предметной областью необходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям. Из житейского опыта все мы знаем, что каждый конкретный адрес "прикреплен" к одному почтовому отделению (имеет один почтовый индекс). При этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу. При проектировании БД для данной предметной части я создал соответственно 2 таблицы: 1 - Таблица адресов (A), 2 - Таблица почтовых отделений (P). Каждая из них имеет свой целочисленный первичный ключ: pk_A - для адресов, pk_P - для почтовых отделений. Кроме полей описывающих характеристики каждой сущности (они сейчас не столь важны) каждая таблица имеет вторичные ключи с указанием на строку "соседней" таблицы. То есть таблица адресов имеет вторичный ключ fk_P с указанием на pk_P таблицы P. А таблица почтовых отделений имеет вторичный ключ fk_A с указанием на pk_A таблицы A. То есть для каждого адреса хранится (может хранится) ссылка на почтовое отделение, за которым закреплен данный адрес. А для каждого почтового отделения хранится ссылка на его физический адрес. Оба вторичных ключа NULL-допускающие (NULL если почтовое отделение для адреса, или адрес почты неизвестны или не указаны). Вроде бы всё очевидно (на мой взгляд). Проблема в том, что окружающие меня "специалисты" (и их большинство) увидев данные "перекрестные" ссылки утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. И хором настаивают на введение третьей "связующей" таблицы. При этом с аргументацией их мнения дела обстоят не важно. Самый "достойный" их аргумент (и пожалуй единственный), что в этом случае не будет работать каскадное удаление. Я отвечаю, что оно в данном случае не столь важно и даже вредно. Предлагаемые схемы с третьей таблицей представляются мне лишь менее адекватно описывающими семантику описанных связей. Народ, помогите! Рассудите нас. А то у меня возникают "тяжкие раздумья" - то ли я дурак и чего-то не понимаю в этой жизни, то ли... В общем помогите, выскажите своё мнение. Чем больше будет таких мнений, тем было бы полезней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:28 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Microbit, ИМХО, почтовое отделение может находиться на перекрестке 2-х улиц и иметь 2 адреса: например, Ленина, 20 и Маркса, 36. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:32 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Я сталкивался с тем, что порой одно отделение в полном составе уходит в отпуск и на это время адрес обслуживается другим отделением... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:37 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Не хотелось бы, чтобы тема ушла несколько в сторону от желаемой. Дело в том, что предметная семантика связей адреса и почты не вызывает нареканий со стороны окружающих "специалистов". Это не вызывает споров, и с этим они в принципе согласились, что семантические связи исходя из необходимых требований предметной области именно такие, как я описал. Споры возникают именно по реализации данной семантики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:47 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
или вообще за почтовым отделением закреплена "территория" :) - (от сих и до обеда). второе адрес может обслуживать и не одно отделение (редко - но может быть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:49 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
на самом деле зависит не только от данных но и от того что требуется получить от этих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:50 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Я сказал к тому, что в случае наличия таблицы связей можно организовать историчность (добавлением колонок "Дата с", "Дата по") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:53 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
MicrobitПри этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу Вы про "полевую почту" слышали? MicrobitПри проектировании БД для данной предметной части я создал соответственно 2 таблицы: 1 - Таблица адресов (A), Хм... А что за сущность такая "Адрес"? Почтовый адрес состоит из нескольких компонент (внутри страны): территориальное образование (республика, край, область) и его структурные единицы (район, округ), населенный пункт (город, поселок), улица (квартал), дом... Каждую из этих компонент можно рассматривать как самостоятельную сущность. Судя по вашему описанию, проектируемая система рассчитана на обслуживание одного населнного пункта... Но даже в этом случае, рекомендую создать хотя бы справочник улиц (то есть отдельную таблицу для улиц), а в таблице адресов - внешний ключ на нее. Microbit2 - Таблица почтовых отделений (P). И что хранится в этой таблице, кроме кода почтового отделения и ссылки на его адрес? В вашей структуре, надо полагать, есть еще таблицы для организаций и людей, чьи адреса лежат в "Таблице адресов". Почему почтовые отделения нельзя объединить с другими организациями? Microbit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 11:47 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
авторнеобходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям. почтовые ящики П/Я вы собираетесь учитывать ? и физические и юридические лица их широко используют. причем вы можете арендовать несколько П/Я в разных П/О для справки : каждый П/Я имеет свой номер (ай-ди) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 11:54 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
`ёадрес может обслуживать и не одно отделение (редко - но может быть) В смысле? В моей схеме несколько почтовых отделений могут ссылаться на одну строку адреса. А вот, чтобы адрес имел несколько почтовых индексов, я такого не встречал и не слышал, чтобы такое где-то использовалось. tru55Я сказал к тому, что в случае наличия таблицы связей можно организовать историчность (добавлением колонок "Дата с", "Дата по") Это бесспорно. В принципе вообще любую связь 1 ко многим можно "расширить и углубить" с добавлением "истории" и прочих "наворотов". Например должность для сотрудника можно хранить прямой ссылкой со строки сотрудника на строку должности, а можно с использованием дополнительной таблицы (таблиц) хранить историю изменения должностей. Всё зависит от прикладных задач автоматизируемой предметной области. Но до абсурда ведь тоже доводить не надо, наверное. Ведь можно, например, сделать привязку населенного пункта к региону (области в которой находится данный пункт) прямой ссылкой. А можно через дополнительную связующую таблицу с ведением истории на случай, если изменится территориальное деление и данный населенный пункт будет входить в другую область :) В "моём" случае, повторюсь, задачи автоматизируемой предметной области не требуют дополнительных "наворотов" и это не является предметом дискуссии с нашими "специалистами". Дискутируется именно реализация описанной семантики связей. И оппонирующая сторона "напирает" именно на якобы имеющиеся технические сложности и проблемы реализации этого варианта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 12:11 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Microbit, исходную задачу опишите. Предложенный вами вариант реализации не позволяет ее воспроизвести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 12:31 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
baracsMicrobitПри этом каждое почтовое отделение в свою очередь расположено по одному конкретному физическому адресу Вы про "полевую почту" слышали? Издеваетесь, да? :) А у людей "трагедия"... baracsMicrobitПри проектировании БД для данной предметной части я создал соответственно 2 таблицы: 1 - Таблица адресов (A), Хм... А что за сущность такая "Адрес"? Почтовый адрес состоит из нескольких компонент (внутри страны): территориальное образование (республика, край, область) и его структурные единицы (район, округ), населенный пункт (город, поселок), улица (квартал), дом... Каждую из этих компонент можно рассматривать как самостоятельную сущность. Судя по вашему описанию, проектируемая система рассчитана на обслуживание одного населнного пункта... Но даже в этом случае, рекомендую создать хотя бы справочник улиц (то есть отдельную таблицу для улиц), а в таблице адресов - внешний ключ на нее. :) Да на самом деле так всё и сделано. Есть и области, и районы, и населенные пункты, и улицы. Всё в отдельных таблицах. Таблица адресов - это лишь конечный "листик" этого "дерева", конечный узел. Я просто не стал здесь это описывать, как не имеющее принципиального значения для существа вопроса. А так - конечно, всё это есть, а строка в таблице адресов просто уже определяет конкретный почтовый адрес, для которого должен быть определен почтовый индекс (почтовое отделение). baracsMicrobit2 - Таблица почтовых отделений (P). И что хранится в этой таблице, кроме кода почтового отделения и ссылки на его адрес? В вашей структуре, надо полагать, есть еще таблицы для организаций и людей, чьи адреса лежат в "Таблице адресов". Почему почтовые отделения нельзя объединить с другими организациями? Пока достаточно почтового индекса и физического адреса. Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации. Иначе, конечно, можно было бы с почты сделать ссылку на таблицу организаций. baracsMicrobit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите. Да ничего "особливого"... Всё что нужно, это для каждого адреса иметь возможность задавать и получать почтовый индекс и физический адрес почтового отделения. И, соответственно, наоборот... Для конкретного почтового индекса (почтового отделения) получить список "прикрепленных" к нему адресов. nosovавторнеобходимо хранить адреса (людей, организаций) и информацию по почтовым отделениям. почтовые ящики П/Я вы собираетесь учитывать ? и физические и юридические лица их широко используют. причем вы можете арендовать несколько П/Я в разных П/О для справки : каждый П/Я имеет свой номер (ай-ди) Нет, это не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 12:47 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
А может просто взять КЛАДР :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 13:11 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
Microbit Да на самом деле так всё и сделано. Есть и области, и районы, и населенные пункты, и улицы. Всё в отдельных таблицах. Таблица адресов - это лишь конечный "листик" этого "дерева", конечный узел. Я просто не стал здесь это описывать, как не имеющее принципиального значения для существа вопроса. А так - конечно, всё это есть, а строка в таблице адресов просто уже определяет конкретный почтовый адрес, для которого должен быть определен почтовый индекс (почтовое отделение). Интересно, что еще вы посчитали не имеющим принципиального значения для существа вопроса? Вопрос остался: зачем вам этот "конечный узел"? Microbit Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации. Смысл этой фразы от меня ускользнул. MicrobitbaracsMicrobit...утверждают, что это "ересь", что так делать неправильно, нельзя и это вообще работать не будет. Чтобы понять, будет работать или нет, надо знать чего вы от этой структуры хотите. Да ничего "особливого"... Всё что нужно, это для каждого адреса иметь возможность задавать и получать почтовый индекс и физический адрес почтового отделения. И, соответственно, наоборот... Для конкретного почтового индекса (почтового отделения) получить список "прикрепленных" к нему адресов. Проблем с получением того и другого я не вижу, но, сдется, вы опять чего-то не договариваете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 13:27 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
baracsВопрос остался: зачем вам этот "конечный узел"? Этот "конечный узел" может быть связан с другими сущностями (людьми, организациями) в соотношении "многие ко многим". baracsMicrobit Дело в том, что почтовые отделения в контексте автоматизируемой предметной области не предполагается использовать как "полноценные" организации. Смысл этой фразы от меня ускользнул. От "почтовых отделений" требуется только их почтовый индекс и физический адрес, как контрагенты по реализуемой бизнес логике они не выступают. baracsПроблем с получением того и другого я не вижу, но, сдется, вы опять чего-то не договариваете... Естественно "не договариваю". А "не договариваю" я полного описания всей предметной области и бизнес логики всей системы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 14:11 |
|
||
|
Нелепый вопрос для опытных профессионалов
|
|||
|---|---|---|---|
|
#18+
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, разные по смыслу связи правильнее хранить в разных таблицах, а не запихивать все в одну с добавлением специальных атрибутов для их различения. В случае нескольких адресов на одно ПО, из таблицы ПО ссылку на адрес надо будет исключить и добавить промежуточную таблицу, в которой будут перечислены ссылки на все возможные адреса для каждой ссылки на ПО. Причем, возможно, стоит рассмотреть возможность нахождения двух или более разных ПО по одному и тому же адресу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2009, 06:25 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36252935&tid=1543032]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 455ms |

| 0 / 0 |
