Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / не понимаю, как сделать / 15 сообщений из 15, страница 1 из 1
14.08.2007, 11:50
    #34725896
Albatross
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понимаю, как сделать
Есть таблица городов

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


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

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

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


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

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

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

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

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

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

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

Как же делать?
...
Рейтинг: 0 / 0
14.08.2007, 14:47
    #34726779
sti
sti
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понимаю, как сделать
Разве не может ближайшей к магазину оказаться станция в другом городе?
...
Рейтинг: 0 / 0
14.08.2007, 14:54
    #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
14.08.2007, 15:22
    #34726937
Albatross
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понимаю, как сделать
Во, спасибо, именно то, что нужно!!!!
Получается, что излишние констрейнты иногда полезно делать (например, как сдесь - ведь station_id сама по себе уникальна, тем более вместе с city_id
...
Рейтинг: 0 / 0
14.08.2007, 16:36
    #34727297
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не понимаю, как сделать
AlbatrossВо, спасибо, именно то, что нужно!!!!
Получается, что излишние констрейнты иногда полезно делать (например, как сдесь - ведь station_id сама по себе уникальна, тем более вместе с city_id

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

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

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

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

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

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

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

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

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

зависит...


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


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