Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 10:27   #1
WOLFBASH
Новичок
Джуниор
 
Регистрация: 25.11.2012
Сообщений: 2
По умолчанию Как нормализовать таблицы

Доброе время суток, товарищи.
У меня проблемка такого плана:
есть таблица Flight(Рейсы)

CREATE TABLE [dbo].[Flight] (
[id_flight] [smallint] IDENTITY (1, 1) NOT NULL ,
[name_flight] [char] (20) COLLATE Cyrillic_General_CI_AS NULL ,
[date_flight] [datetime] NULL ,
[log_user] [tinyint] NULL ,
[log_date] [datetime] NULL ,
[otkuda] [tinyint] NULL ,
[kuda] [tinyint] NULL
) ON [PRIMARY]

таблица Punkt
CREATE TABLE [dbo].[Punkt] (
[id_punkt] [smallint] IDENTITY (1, 1) NOT NULL ,
[name_punkt] [char] (20) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]

таблица Spisok
CREATE TABLE [dbo].[Spisok] (
[id_spisok] [smallint] NULL ,
[id_post] [smallint] NULL ,
[id_fligth] [smallint] NULL
) ON [PRIMARY]

В таблице Flight поля otkuda и kuda внешние ключи к Punkt.id_punkt. Наверное это неправильно что в одной таблице 2 внешних ключа относятся к одному и томуже полю..
Вопрос: как правильно нормализоровать таблицу Flight? Не хочется раздувать БД вводя 2 таблицы: Punkt_ot с id и name_punkt_ot и Punkt_do с id и name_punkt_do.

Но другово решения не вижу, может кто подскажет дельный совет....
WOLFBASH вне форума Ответить с цитированием
Старый 25.11.2012, 10:42   #2
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

вполне нормальная ситуация имхо
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 25.11.2012, 10:57   #3
WOLFBASH
Новичок
Джуниор
 
Регистрация: 25.11.2012
Сообщений: 2
По умолчанию

Цитата:
вполне нормальная ситуация имхо
А поподробней....
WOLFBASH вне форума Ответить с цитированием
Старый 25.11.2012, 13:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А поподробней....
А поподробней тебе расскажет EXPLAIN PLAN твоих запросов к таблице, в котором можно увидеть скорости выборок.
Сами шаблоны таблиц ничего не говорят практически, будь они сто раз оптимальны, но если запросы к этим таблицам дают огромную нагрузку - считай задание провалено.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2012, 03:35   #5
anitalp
 
Регистрация: 19.04.2012
Сообщений: 3
По умолчанию

есть таблица
учреждение(дата прийома, Фио_врача,специальность, Фио_пациента, №кабинета, адрес_пациента, страховой полис, диагноз, препарат, побочный эффект) надо довести это все до 3-й НФ
у мну такое вышло
врач(id_врача, фио, специальность, статус)
пациент(id_пациента, адрес, фамилия, страховой полис)
препарат(код_препарата, название, побочные_эфекты)
Лечение(id_врача,id_пациента, дата_прийома, номер кабинета)

все бы ничего, на если челу несколько препаратов врач назначит, как быть, ведь в полях должны только атомарные быть значения, а таковым оно будет только если 1 препарат назначит, помогите плз, всю голову сломал
anitalp вне форума Ответить с цитированием
Старый 13.12.2012, 08:40   #6
Dexes
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 86
По умолчанию

2 anitalp, не увидел, чтобы где либо в лечении прописывался ID препарата.
Расширь базу следующей табличкой
medicaments2therapy (Медикаменты_для_лечения)
id_лечения
id_препарата
количество (если нужно).

И получится связь многие ко многим, т.к. во многих лечениях может использоваться препарат и наборот, в одном лечении может использоваться множество препаратов.

P.S. дата_приЁма, а то аж глаза выжигает.
Dexes вне форума Ответить с цитированием
Старый 13.12.2012, 09:00   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

например

в таблицу Лечение добавляете id_Лечение (кстати, я бы рекомендовал ВСЕГДА иметь в таблице первичный ключ, желательно простой (отдельный).

добавляете таблицу
НазначеныйПрепарат (id_Назначения, id_Лечения, id_Препарата, дозировка, количество_дней_приёма)

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

профит.


UPDATE
я прозевал пост от Dexes, иначе свой (по сути о том же самом!), не стал бы уже писать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2012, 23:12   #8
anitalp
 
Регистрация: 19.04.2012
Сообщений: 3
По умолчанию

спасибо, а что можно сделать с аномалией удаления, ведь если удалю врача, сним удалится все строки, что с ним связано, так ведь не должно быть?
anitalp вне форума Ответить с цитированием
Старый 15.12.2012, 23:24   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это не аномалия, а естественный порядок вещей для базы. Т.е. нельзя удалить врача, не удалив соответствующие записи из таблицы Лечение. В принципе некоторые СУБД допускают NULL в id_врача таблицы Лечение, но информация о лечащем враче при этом все равно потеряется. Если врач уволился, то в его записи в каком-то поле можно этот факт зафиксировать для запрета дальнейшего использования записи.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.12.2012, 23:32   #10
anitalp
 
Регистрация: 19.04.2012
Сообщений: 3
По умолчанию

Аватар в мс аксесе есть варианты для запрета удаления соответствующих записей?
anitalp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить 2 таблицы? Jacki Microsoft Office Excel 8 08.03.2011 20:33
Как сделать чтобы одна ячейка таблицы содержала такой же текст как другая? 3мей Microsoft Office Word 2 15.01.2011 22:55
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev Microsoft Office Access 2 24.09.2010 12:46
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev SQL, базы данных 0 23.09.2010 23:42
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17