Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 92
от 16.05.2006, 12:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 297, Экспертов: 32
В номере:Вопросов: 1, Ответов: 4


Вопрос № 42702: Добрый день. Есть вопрос по базе дынных BDE. Вопрос не совсем по запросом а по структуре самой таблице. Хочу создать базу, для личного использования, телефонный справочник. Создаю первую таблицу куда вношу название отдела, его телефон. Т....

Вопрос № 42.702
Добрый день.
Есть вопрос по базе дынных BDE.
Вопрос не совсем по запросом а по структуре самой таблице.
Хочу создать базу, для личного использования, телефонный справочник. Создаю первую таблицу куда вношу название отдела, его телефон. Т. к. отделы могут добовлятся создаю поля с автоматическим заполнением и делаю его ключивым. Вторая таблица сотрудники. кде одно из полей это номер отдела в из первой таблицы. Устанавливаю связь, все работает превосходно. Но из-за некоторых особенностей среды програмирования требуется отказаться от автоматического заполнения в первой таблице, номер отдела. Можеьте подсказать какое поле лудше сделать ключивым и как его заполнять? Не надо предлогать название отдела делать ключивым, т. к. в дальнейшем не очень удобно будет работать. Какие есть предложения. Заранее спасибо за ответы.
Отправлен: 11.05.2006, 11:36
Вопрос задал: AllexZ (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Shcherbakov Anton
Здравствуйте, AllexZ!
Сделай поле номера телефона ключевым.. т.к. телефон фактически получается уникальный.
Ответ отправил: Shcherbakov Anton (статус: 1-ый класс)
Ответ отправлен: 11.05.2006, 11:56
Оценка за ответ: 5
Комментарий оценки:
Надо создать какое-то ключевое. Но проблема какую информацию туда заносить. Телефоны тоже не уникальны. Есть пустые поля.

Отвечает: Kazakh
Здравствуйте, AllexZ!
В принципе вы сами можте заполнять ключевое поле, вручную, так сказать.
Но можете использовать и номер телефона в качестве ключа.
Тогда как бы теряется сымсл использования двух таблиц. Сделайте ещё одно поле в таблице с клиентами и всё.
---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 8-ой класс)
Ответ отправлен: 11.05.2006, 12:09
Оценка за ответ: 5
Комментарий оценки:
Надо создать какое-то ключевое. Но проблема какую информацию туда заносить. Телефоны тоже не уникальны. Есть пустые поля.

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, AllexZ!
Пример VisualBasic6, связь через ADO, но принцим можно использовать и для других баз и сред программирования
Создаем таблицы:

KLUCH
Kod long уникальный код отдела

OTDEL
Nom long уникальный код отдела
Naim string( 100 )

TELEF
Nom long уникальный код отдела
Tel long телефон отдела

SOTR
Nom long уникальный код отдела
TabN long табельный номер сотрудника (по-идее должен быть уникальным, но для больших предприятий при пятизначном ТН может не хватить свободных номеров )
FIO string( 50 ) ФИО сотрудника отдела

Сначала создается отдел, затем ему назначаются телефоны/сотрудники. Так как телефонов/сотрудников может быть несколько, для них предусмотрены отдельные таблицы.

Даже если отдел удаляется, ключ использован и не повторится.

Программа
На основной форме Form4 расположена таблица списка отделов. Рядом находятся две таблицы, в которых выводятся номера телефонов отдела и список сотрудников.
На форме расположены кнопки "Добавить отдел" Command1 , "Добавить телефон" Command2, "Добавить сотрудника" Command3.
Можно еще "Переименовать отдел" Command4, "Удалить отдел" Command5, "Изменить телефон" Command6, "Удалить телефон" Command7, "Удалить сотрудника" Command8, "Изменить сотрудника" Command9, "Перевести сотрудника" Command10.

На форме расположены источники данных, настроенные на базу:
Otdel типа Adodc, к нему привязан VidOtdel типа DataGrid
Telef типа Adodc, к нему привязан VidTelef типа DataGrid
Sotr типа Adodc, к нему привязан VidSotr типа DataGrid

В коде формы Form4 расположена процедура обновления списка (Data_Refresh), которую необходимо запускать при открытии формы и изменениях данных.

Имеется форма Vvod для ввода/изменения наименования отдела, ввода/изменения сотрудников и ввода/изменения телефона.
На ней расположены Label1 - заголовок вида операции, Text1 - содержимое для изменения, Command1 - "Выполнить", Command2 - "Отмена".
Код формы Vvod
Private Sub Command1_Click ( )
b_1 = True
Vvod.Hide
End Sub
Private Sub Command2_Click ( )
b_1 = False
Vvod.Hide
End Sub

Для примера показана процедура добавления нового отдела.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 2-ой класс)
Ответ отправлен: 11.05.2006, 15:46
Оценка за ответ: 5
Комментарий оценки:
Идею понял. Спасибо за такое подробное описание.

Отвечает: Игорь Елизаров
Здравствуйте, AllexZ!
Стандартно, конечно, делается дополнительное поле-ключ с автоинкрементом и все.Это может быть и не код отдела и уж тем более не наименование.
при удалении записи ключи не освобождаются, то есть если были, как в примере записи с идентификаторами 1,2,3 и запись 3 удалили, то следующая все равно будет 4, то есть записи будут 1,2,4
Но если автоинкремента нет..
тогда это поле индекса надо заполнять самостоятельно.
вариантов может быть много.
например взять текущую дату и время в текстовом формате
другой вариант, может быть более интересным
в SQL есть отдельный тип данных для формирования и хранения уникальных ключей длиной 16 байт (GUID)
то есть в таблицу заносишь дополнительный столбец с типом данных UniqueIdentifier , а при добавлении записей заполняешь это поле по команде NewId()
Ответ отправил: Игорь Елизаров (статус: 4-ый класс)
Ответ отправлен: 11.05.2006, 18:45
Оценка за ответ: 5
Комментарий оценки:
Спасибо за информацию. Поэксперементируем.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное