Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Помогите построить связь  [new]
m0m0k0
Member

Откуда:
Сообщений: 18
Dimitry Sibiryakov
m0m0k0
Как бы вы релизовали данное решение?

А какое слово из "для каждого города просто указывается ссылка" Вам непонятно?

Т.е. вы предлагаете в таблице городов проставить ссылки на адм. центры? В таком случае, где гарантия, что вы не ошибетесь и такого города не окажется?
9 сен 19, 18:42    [21967188]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

m0m0k0
В таком случае, где гарантия, что вы не ошибетесь и такого города не окажется?

Откройте для себя всю мощь foreign key.

Posted via ActualForum NNTP Server 1.5

9 сен 19, 18:47    [21967192]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
m0m0k0
Member

Откуда:
Сообщений: 18
Dimitry Sibiryakov
m0m0k0
В таком случае, где гарантия, что вы не ошибетесь и такого города не окажется?

Откройте для себя всю мощь foreign key.


FK на ту же таблицу? Так что можно что-ли OO
9 сен 19, 18:55    [21967203]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

m0m0k0
Так что можно что-ли OO

А кто запретит-то?..

Posted via ActualForum NNTP Server 1.5

9 сен 19, 19:09    [21967214]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
L.Otujktd
Member

Откуда:
Сообщений: 63
m0m0k0
ДД коллеги! Никак не могу сообразить как лучше сделать,
имеется две таблицы "Регионы" и "Города", каждый город относится к какому-то региону, у каждого региона есть город, который является административным центром.

Все идеи сводятся к тому, чтобы сделать связь многие к многим с дополнительными ограничениями, но не нравится мне это решение...
Может есть идеи

Третья таблица напрашивается:)
9 сен 19, 22:07    [21967307]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19310
Serguei
город может в 2 региона входить?

Один город может даже в две страны входить. Граница между кухней и туалетом. Прецеденты есть и в Европе, и в Южной Америке.

Вообще я бы рекомендовал рассматривать и город и регион как контейнеры для более мелких объектов. И слить их в одну таблицу.

А административное деление и признак центра указывать в отдельной табличке.

Оно конечно для сдачи курсовой не прокатит, но в промышленной эксплуатации работать как раз будет отлично. Особенно если города и регионы грузить из внешних источников, а не садить на их ведение умственно отсталых.
10 сен 19, 08:31    [21967420]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Serguei
Member

Откуда: Papua New Guinea
Сообщений: 680
Сергей Васкецов
Один город может даже в две страны входить. Граница между кухней и туалетом. Прецеденты есть и в Европе, и в Южной Америке.

Конкретными примерами можете поделиться?

Сергей Васкецов
Вообще я бы рекомендовал рассматривать и город и регион как контейнеры для более мелких объектов. И слить их в одну таблицу.


Возможно нужно так рассматривать. Весь вопрос в постановке задачи) Теоретически можно хоть до номера дома расписать. Только нужно понять зачем...
10 сен 19, 10:13    [21967489]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
zeon11
Member

Откуда: Сибирь, Кемерово
Сообщений: 1146
m0m0k0,

Создай одну таблицу, назови нейтрально, например, geographical_place,
сделай таблицу иерархическую (дерево),
В корень поставь "Россия", все регионы, включая Москву и Севастополь - в подчинение.
Области так-же подчиняются узлу "Россия"
В подчинении "Область" районы и города области. Для областного центра придумай какой-нибудь признак.
Основное преимущество "дерева" - не надо ломать голову над созданием таблиц, если в будущем потребуется более подробная детализация.

К сообщению приложен файл. Размер - 53Kb
10 сен 19, 12:21    [21967609]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
vmag
Member

Откуда: MP
Сообщений: 3235
m0m0k0
vmag,

В первом случае может быть два адм. центра у региона, не подходит


В свете более-менее уточненной постановки задачи (наконец-то), может есть смысл сделать так, как это делают все нормальные сети - просто указать в регионе все реальные пункты выдачи (это как раз и есть первый случай один ко многим - регион -> пункты выдачи).

Многие задачи долго простаивают и в конце концов умирают по причине того, что разработчик пытается решить все решаемые и не решаемые проблемы за счет схемы БД (как будто у него нет в и планах делать интерфейс, типа юзеры будут вбивать данные непосредственно в таблицы).

Задача не стоит и выеденного яйца, - показать на карте за выбранный регион все пункты выдачи, а административный центр выделить красным. Зайди в яндекс почту, выбери карты и нарисуй за 20 минут без всяких бд...
10 сен 19, 12:51    [21967651]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

vmag
просто указать в регионе все реальные пункты выдачи

Не будет это работать. Возьмём реальный пример: центр выдачи в Агрызе. Регион - Татарстан,
его центр - Казань. Но до Ижевска, регионального центра Удмуртии всего полчаса езды в то
время как до Казани - шесть. Аффтар всерьёз уверен, что недостающий товар в Агрыз будут
везти из Казани или посылать туда клиента?..

Posted via ActualForum NNTP Server 1.5

10 сен 19, 13:13    [21967688]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
ultrasonic7
Member

Откуда:
Сообщений: 114
Вот какая модель представляется. Сразу скажу, чего в ней нет - федеральных округов и районов. Что в ней есть - регионы, коды регионов и города, в том числе федерального значения. Таблица REGIONS связана отношением "один-ко многим" с таблицей REGION2CODE и так же отношением "один-ко многим" с таблицей CITIES.

+ Код
Создаём структуру
-- Create tables section -------------------------------------------------

-- Table REGIONS
CREATE TABLE REGIONS(
  REGION_ID Number NOT NULL,
  REGION_NAME Varchar2(200 CHAR),
  REGION_TYPE Number
);

-- Add keys for table REGIONS
ALTER TABLE REGIONS ADD CONSTRAINT PK_REGIONS PRIMARY KEY (REGION_ID);

-- Table and Columns comments section
COMMENT ON TABLE REGIONS IS 'Регионы';
COMMENT ON COLUMN REGIONS.REGION_ID IS 'ID региона (области, края, республики).';
COMMENT ON COLUMN REGIONS.REGION_NAME IS 'Название региона (области, края, республики)';
COMMENT ON COLUMN REGIONS.REGION_TYPE IS 'Тип региона (1 - область, 2 - республика, 3 - автономный округ, 4 - край, 5 - автономная область, 6 - город федерального значения)';

-- Table REGION2CODE
CREATE TABLE REGION2CODE(
  REGION_ID Number NOT NULL,
  REGION_CODE Number NOT NULL
);

-- Add keys for table REGION2CODE

ALTER TABLE REGION2CODE ADD CONSTRAINT PK_REGION2CODE PRIMARY KEY (REGION_ID,REGION_CODE);

-- Table and Columns comments section
  
COMMENT ON TABLE REGION2CODE IS 'Коды регионов';
COMMENT ON COLUMN REGION2CODE.REGION_ID IS 'ID региона (ссылка на REGIONS.REGION_ID)';
COMMENT ON COLUMN REGION2CODE.REGION_CODE IS 'Код региона';

-- Table CITIES
CREATE TABLE CITIES(
  CITY_ID Number NOT NULL,
  REGION_ID Number,
  CITY_NAME Varchar2(200 CHAR) NOT NULL,
  ADM_CENTER Number,
  IS_FEDERAL Number
);

-- Add keys for table CITIES
ALTER TABLE CITIES ADD CONSTRAINT PK_CITIES PRIMARY KEY (CITY_ID);

-- Table and Columns comments section
COMMENT ON TABLE CITIES IS 'Города (населенные пункты)';
COMMENT ON COLUMN CITIES.CITY_ID IS 'ID города';
COMMENT ON COLUMN CITIES.REGION_ID IS 'ID региона (ссылка на REGIONS.REGION_ID)';
COMMENT ON COLUMN CITIES.CITY_NAME IS 'Наименование города (населенного пункта)';
COMMENT ON COLUMN CITIES.ADM_CENTER IS 'Признак административного центра (0 - не является административным центром, 1 - является административным центром)';
COMMENT ON COLUMN CITIES.IS_FEDERAL IS 'Город федерального значения (0 - не является городом федерального значения, 1 - является городом федерального значения)';

-- Create relationships section ------------------------------------------------- 
ALTER TABLE REGION2CODE ADD CONSTRAINT Relationship2 FOREIGN KEY (REGION_ID) REFERENCES REGIONS (REGION_ID);
ALTER TABLE CITIES ADD CONSTRAINT Relationship5 FOREIGN KEY (REGION_ID) REFERENCES REGIONS (REGION_ID);


Заполняем
INSERT INTO SCHEMATEST.REGIONS VALUES (1, 'Москва', 6);
INSERT INTO SCHEMATEST.REGIONS VALUES (2, 'Санкт-Петербург', 6);
INSERT INTO SCHEMATEST.REGIONS VALUES (3, 'Севастополь', 6);
INSERT INTO SCHEMATEST.REGIONS VALUES (4, 'Свердловская область', 1);
INSERT INTO SCHEMATEST.REGIONS VALUES (5, 'Ненецкий автономный округ', 3);
INSERT INTO SCHEMATEST.REGIONS VALUES (6, 'Московская область', 1);
INSERT INTO SCHEMATEST.REGIONS VALUES (7, 'Ленинградская область', 1);

INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 77);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 97);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 99);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 177);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 199);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 197);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (1, 777);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (2, 78);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (2, 98);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (2, 178);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (4, 66);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (4, 96);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (5, 83);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (6, 50);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (6, 90);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (6, 150);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (6, 190);
INSERT INTO SCHEMATEST.REGION2CODE VALUES (7, 47);

INSERT INTO SCHEMATEST.CITIES VALUES (1, 1, 'Москва', 1, 1);
INSERT INTO SCHEMATEST.CITIES VALUES (2, 2, 'Санкт-Петербург', 1, 1);
INSERT INTO SCHEMATEST.CITIES VALUES (3, 3, 'Севастополь', 1, 1);
INSERT INTO SCHEMATEST.CITIES VALUES (4, 4, 'Екатеринбург', 1, 0);
INSERT INTO SCHEMATEST.CITIES VALUES (5, 4, 'Нижний Тагил', 0, 0);
INSERT INTO SCHEMATEST.CITIES VALUES (6, 5, 'Нарьян-Мар', 1, 0);
INSERT INTO SCHEMATEST.CITIES VALUES (7, 6, 'Сергиев Посад', 0, 0);




Модель довольно упрощенная, но для практических задач должно хватить.
Если нужно совсем-совсем подробную модель, то попытайтесь скопировать структуру ФИАС.

К сообщению приложен файл. Размер - 27Kb
10 сен 19, 13:20    [21967699]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 780
Dimitry Sibiryakov
vmag
просто указать в регионе все реальные пункты выдачи

Не будет это работать. Возьмём реальный пример: центр выдачи в Агрызе. Регион - Татарстан,
его центр - Казань. Но до Ижевска, регионального центра Удмуртии всего полчаса езды в то
время как до Казани - шесть. Аффтар всерьёз уверен, что недостающий товар в Агрыз будут
везти из Казани или посылать туда клиента?..

+1. И чем дальше на восток, тем больше расстояния. И тем выгоднее искать доставку из другого административного образования. Схема ТС возможно актуальна для Московского региона. Может внести в базу координаты пунктов и считать расстояния? Так не пойдёт. Слишком просто. Нужна маршрутная сеть.
10 сен 19, 13:46    [21967723]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19310
Serguei
Сергей Васкецов
Один город может даже в две страны входить. Граница между кухней и туалетом. Прецеденты есть и в Европе, и в Южной Америке.

Конкретными примерами можете поделиться?

Тынц.
Про Южную Америку сами найдёте.
10 сен 19, 13:48    [21967727]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 757
Сергей Васкецов
Serguei
пропущено...

Конкретными примерами можете поделиться?

Тынц.
Про Южную Америку сами найдёте.

Собственно говоря не катит. Это разные города. Ибо в тынце написано:
https://fishki.net/2553106-neobychnaja-granica-mezhdu-belygiej-i-gollandiej.html
Марион де Гон-Велентурф, бургомистр Баарле-Нассау (Нидерланды): "Объединить два муниципалитета из разных стран в единое европейское образование было бы прекрасной идеей. Но в реальности это все еще остается утопией".
Лео ван Тилбург, бургомистр Баарле-Гертога (Бельгия): "Наверное мы никогда до этого не доживём. Сейчас это невозможно по закону. А если это когда-нибудь и случится, что я полностью поддерживаю, наружу вылезут культурные различия".

Так же и скорее всего, в Южной Америке.
Так же как и в России с Украиной (Чертково Ростовской области и Меловое Луганской)
10 сен 19, 14:12    [21967750]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19310
Mr.Fontaine
Собственно говоря не катит. Это разные города

То, что их называют по-разному, сути не меняет.
Есть даже комната, находящаяся в разных странах.
Уж про комнату-то никак не скажете, что это разные комнаты.
10 сен 19, 14:28    [21967766]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 757
Сергей Васкецов, чё, крестики прям по комнате проложены?
10 сен 19, 14:35    [21967776]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19310
Крестики для наглядности. То есть для туристов по большей части. В комнатах крестики наверняка не рисуют, незачем.
В Южной Америке так точно не рисуют.
10 сен 19, 14:36    [21967777]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 757
Сергей Васкецов, Вы лучше бы проработали вопрос нахождения одного города в разных странах на примере Солтни (Англия-Уэльс), но там думается всё проще, ибо всё-таки государство одно: объединённое королевство. Узнайте как там с главой города обстоит: один или два
10 сен 19, 14:38    [21967778]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19310
Mr.Fontaine
Узнайте как там с главой города обстоит: один или два

А какое это имеет значение?
А ещё там может быть сотня депутатов...
Предлагаю вернуться к теме.
10 сен 19, 15:17    [21967815]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
vmag
Member

Откуда: MP
Сообщений: 3235
Dimitry Sibiryakov
Не будет это работать. Возьмём реальный пример: центр выдачи в Агрызе. Регион - Татарстан,
его центр - Казань. Но до Ижевска, регионального центра Удмуртии всего полчаса езды в то
время как до Казани - шесть


Это как раз и будет работать, я на карте как клиент увижу, что мне ближе к Ижевску, на карте видно все пункты выдачи, в этом и весь смысл, плохо что проектировщик думает по другому...
10 сен 19, 16:04    [21967862]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
vmag
Member

Откуда: MP
Сообщений: 3235
такое ощущение, что никто не заказывал детали на exist те... пофиг где ты, сделал заказ, тебе показали ближайшие пункты выдачи...
10 сен 19, 16:10    [21967871]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Serguei
Member

Откуда: Papua New Guinea
Сообщений: 680
vmag
такое ощущение, что никто не заказывал детали на exist те... пофиг где ты, сделал заказ, тебе показали ближайшие пункты выдачи...

Логика видимая пользователю в exist думаю другая, чем доставка на большие расстояния.Подозреваю, что exist не обязательно возит по кратчайшему маршруту. Думаю там есть какая то схема логистики и вся привязка к ней. 100% не уверен, но мне кажется это логичным: не делать доставку одной запчасти из ближайшего магазина, если уже есть потребность доставки из более дальнего, но более крупной партии. Логично решать данную задачу не прямо "в лоб"
10 сен 19, 21:38    [21968147]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
vmag
Member

Откуда: MP
Сообщений: 3235
Serguei,

Согласен, просто ТС видит все со своей колокольни, а нужен глобальный подход. Перечень пунктов доставки в регионе это частный случай и интересен только с точки зрения регистрации в БД, для клиента более интересен и продуктивен полный список пунктов доставки вокруг его местоположения, независимо от принадлежности их к региону, об этом и речь...
10 сен 19, 23:26    [21968168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 757
Сергей Васкецов
Mr.Fontaine
Узнайте как там с главой города обстоит: один или два

А какое это имеет значение?
А ещё там может быть сотня депутатов...
Предлагаю вернуться к теме.

Так-то изначально не надо было уходить от темы, и писать чушь типа
Сергей Васкецов
Один город может даже в две страны входить

Сами же дали ссылку, где написано, что законодательство запрещает иметь один город в двух странах.
Потому при проектировании БД ВСЕГДА следует делать, что один город привязан к одной стране.
А в какой стране находится диван, а какой телевизор это никому не интересно и в структуре БД никто это отображать не будет
11 сен 19, 06:44    [21968206]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить связь  [new]
Mr.Fontaine
Member

Откуда: у меня столько мыслей?
Сообщений: 757
vmag
Serguei,

Согласен, просто ТС видит все со своей колокольни, а нужен глобальный подход. Перечень пунктов доставки в регионе это частный случай и интересен только с точки зрения регистрации в БД, для клиента более интересен и продуктивен полный список пунктов доставки вокруг его местоположения, независимо от принадлежности их к региону, об этом и речь...

В данном случае речь вообще не об описанном Вами глобальном подходе. Ибо обсуждаемая задача - это не выбор пункта выдачи пользователем.
Она сидит дальше, уже после того как пользователь выбрал пункт выдачи (правда там похоже закреплено, что в одном населённом пункте всегда один пункт выдачи, но это к нашей задаче отношения не имеет)
После выбора пользователем пункта выдачи и начинает работать обсуждаемый алгоритм:
- проверяется наличие товара в указанном пользователем пункте выдачи
- если есть товар, то лон видимо бронируется
- а вот если его нет, то принимается решение откуда везти товар, чтобы пользователь его получил в указанном им пункте выдачи. Вот этот момент мы и обсуждаем.
На exist.ru эта задача тоже работает, но ты её не видишь, потому давай не уходить от темы обсуждения.
11 сен 19, 07:05    [21968211]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Проектирование БД Ответить