![]() |
|
Модераторы: LSD |
![]()
|
|
| M1ndAction |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Добрый день,
БД давно уже не занимался, да и тогда это было не серьезно - теперь приходится опять вспоминать и вникать во все заново Вопрос в следующем: я получил ТЗ, где уже была прописана структура БД, но при этом ее составлял человек, профессионально этим не занимающийся. Я посмотрел - вроде на первый взгляд все в порядке. Но когда приступил к программированию, то обнаружил ряд спорных моментов, а именно: есть две таблицы - Persons и Places. В Places есть ключевое поле idPlaces, в Persons три поля: peridBirthPlace, peridDeathPlace и peridBurialPlace. Все эти три поля являются внешними ключами на idPlaces. Вопрос, насколько это верно? Меня это с самого начала смущало, а при программировании столкнулся с тем, что вообще как это можно описать? Т.е. раз это внешний ключ, то мне надо, чтобы курсор в наборе данных находился сразу в трех местах одновременно (соответственно три разных значения для каждого из полей peridBirthPlace, peridDeathPlace и peridBurialPlace) Привожу все поля таблицы Perosons: idPersons INT(11) - Ключевое поле perSex INT(1) peridMParent INT(11) peridFMParent INT(11) perBirthdayFrom DATE perBirthdayTo DATE perBirthdayType INT(1) peridBirthPlace INT(11) perBirthPlaceComment TEXT perDeathdayFrom DATE perDeathdayTo DATE perDeathdayType INT(1) peridDeathPlace INT(11) perDeathPlaceComment TEXT peridBurialPlace INT(11) perBurialComment TEXT Таблица Places: idPlaces INT(11) - Ключевое поле plaName VARCHAR(20) plaidParentPlace INT(11) plaType INT(1) СУБД - MySQL 5.1 Embedded, среда программирования Delphi 2009, компоненты доступа MyDAC. |
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
А что в этом такого?
Зачем? |
|||
|
||||
| M1ndAction |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
А как тогда связь организовать между двумя наборами данных? Ведь обычная схема: есть два набора данных - один master, другой detail. Для detail указываем master-dataset и ключевое поле master-dataset, а для detail-dataset указываем "подчиненные" поля, которые и являются внешними ключами. Затем, когда добавляем новую запись в detail, во внешних ключах автоматически проставляется значение из master-dataset, притом из той записи, на которой установлен курсор в наборе данных в данный момент времени. Ведь так? Поэтому, если я правильно рассуждаю, нужно три курсора, чтобы добавить запись, поэтому и загвоздка возникла |
|||
|
||||
| Simpliest |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
Я несколько не понимаю, вы работаете с БД прямым доступом что ли? Насколько я помню в API MySQL есть mysql_real_query() которой дается таки SQL запрос.
Ну а связать 5ть таблиц в одном запросе - это легко.
Собственно вместо имен таблиц и ключей подставить свои названия. При INSERT/UPDATE у вас будет несколько запросов. Для вставки в каждую таблицу. |
||||
|
|||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |