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

Города:
Имя_города varchar()


Есть таблица магазинов
Магазин_id (PK), Город_id (FK)

Есть таблица станций метро

Имя_города(PK), Станция (PK)


Надо сделать таблицу, где бы для магазинов хранились станции метро ближайшие (может быть много для одного магизина), но все станции из города магазина только.

Казалось бы, можно сделать

Магазин_id (PK), Имя_города(PK), Станция (PK)

Но здесь не учитывается, что город, вообще-то, определяется из магазина.

Если же сделать

Магазин_id (PK), Станция (PK)

То можно занести станции, которые в этом городе нет, что плохо.

Как же делать?
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34726779
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве не может ближайшей к магазину оказаться станция в другом городе?
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34726822
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create table City (city_id integer not null primary key, city_name varchar2( 80 ) not null unique);

create table Shop (shop_id integer not null primary key, city_id integer not null, shop_name varchar2( 80 ) not null);

create table Station (station_id integer not null primary key, city_id integer not null, station_name varchar2( 80 ) not null);

alter table Station add constraint Station_ak unique (city_id, station_id);

alter table Shop add constraint Shop_ak unique (city_id, shop_id);

create table Shop_Station (city_id integer not null, shop_id integer not null, station_id integer not null);

alter table Shop_Station add constraint Shop_Station_Shop_fk
  foreign key (city_id, shop_id) references Shop (city_id, shop_id);

alter table Shop_Station add constraint Shop_Station_Station_fk 
  foreign key (city_id, station_id) references Station (city_id, station_id);
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34726937
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, спасибо, именно то, что нужно!!!!
Получается, что излишние констрейнты иногда полезно делать (например, как сдесь - ведь station_id сама по себе уникальна, тем более вместе с city_id
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727297
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlbatrossВо, спасибо, именно то, что нужно!!!!
Получается, что излишние констрейнты иногда полезно делать (например, как сдесь - ведь station_id сама по себе уникальна, тем более вместе с city_id

Решение красивое с академической точки зрения, если полностью абстрагироваться от физической природы моделируемых объектов.
На практике свою ложку дёгтя уже кинул sti.

Скорее, имеет смысл завести таблицу расстояний магазинов от станций метро, тогда задача получения списка ближайших станций сведётся к разработке и выполнению соответствующего SQL запроса, а необходимость построения вспомогательных отношений с дублированием данных отпадёт. При необходимости можно построить материализованное представление.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727372
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabПри необходимости можно построить материализованное представление.
если принять как догму, что других СУБД кроме ORACLE не существует, то да... конечно можно. :)
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727395
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab AlbatrossВо, спасибо, именно то, что нужно!!!!
Получается, что излишние констрейнты иногда полезно делать (например, как сдесь - ведь station_id сама по себе уникальна, тем более вместе с city_id

Решение красивое с академической точки зрения, если полностью абстрагироваться от физической природы моделируемых объектов.
На практике свою ложку дёгтя уже кинул sti.

Скорее, имеет смысл завести таблицу расстояний магазинов от станций метро, тогда задача получения списка ближайших станций сведётся к разработке и выполнению соответствующего SQL запроса, а необходимость построения вспомогательных отношений с дублированием данных отпадёт. При необходимости можно построить материализованное представление.
Поддерживаю. Тем более, что при открытии нового магазина или новой станции не придется перестраивать всю систему.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727476
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm mcureenabПри необходимости можно построить материализованное представление.
если принять как догму, что других СУБД кроме ORACLE не существует, то да... конечно можно. :)

Материализованное представление это механизм, который с некоторыми ограничениями можно не особо напрягаясь реализовать в любом приложении БД. В Оракле он встроен в СУБД.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727500
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabНа практике свою ложку дёгтя уже кинул sti.
Точнее, "абсолютно теоретическую ложку дегтя". Для магазина в Костроме, поверьте, все равно, какая именно станция метро окажется к нему ближайшей по "таблице расстояний магазинов от станций метро". Мало того, если для магазина, допустим, в Ивантеевке указать ближайшим метро "Медведково" - это будет верно математически (допустим - не проверял с линейкой) но неудачно практически.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727549
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лично жил в квартире в одном городе и ходил пешком до станции метро в другом. Она была значительно ближе, чем станция в "моем" городе. )) Правда было это не России.

Поскольку мы не знаем всей задачи, то не можем корректно сравнивать решения. Я вообще с трудом представляю для каких целей может понадобиться знать только одну, ближайшую станцию метро. Более логичным кажется знать несколько ближайших станций.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727559
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stiЯ лично жил в квартире в одном городе и ходил пешком до станции метро в другом. Она была значительно ближе, чем станция в "моем" городе. )) Правда было это не России.
Именно. В России таких конфигураций, сколь мне известно, нет; это я подразумевал.

stiЯ вообще с трудом представляю для каких целей может понадобиться знать только одну, ближайшую станцию метро. Более логичным кажется знать несколько ближайших станций.
Я вообще с трудом представляю, как можно рассуждать по теме, не прочитав даже стартового письма топика.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727647
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerэто я подразумевал.

примечание sti имеет смысл для случаев (помимо случаев когда рядом находятся два города с метро, чего в Росиии нет), когда в одном из городов нет метро но есть магазин(ы)

и расстояние от метро в одном городе до магазина в другом сравнимо с другими расстояниями между магазинами и метро в одном городе
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727661
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentпримечание sti имеет смысл для случаев
Оно имеет смысл для случаев, когда кому-то будет не лень вводить сателлиты как отдельные города, но будет лень спроектировать БД с учетом сателлитов. Такая комбинация представляется мне довольно странной.
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34727683
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer[quot proposed amendment]Такая комбинация представляется мне довольно странной.

зависит...


впрочем - чепуха все это, конечно - нет смысла дискутировать
...
Рейтинг: 0 / 0
не понимаю, как сделать
    #34728036
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Материализованное представление это механизм, который с некоторыми ограничениями можно не особо напрягаясь реализовать в любом приложении БД. В Оракле он встроен в СУБД.
оригинально. Особо не напрягаясь его обновлять при любых обновления depencies... Реализуйте, не напрягаясь, посмотрим.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / не понимаю, как сделать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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