Работа со связаными таблицами
, Как лучше всего организовать сабж
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.20] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
| Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Работа со связаными таблицами
, Как лучше всего организовать сабж
|
Сообщ.
#16
,
|
|
|
|
Создай Primary Key по двум полям |
|
Сообщ.
#17
,
|
|
|
|
Цитата SexGenius @ А как же сделать чтобы работало с повторяющимися номерами шкафа в таблице Шкафы ? Явно, надо почитать чтото о 4-х типах нормализованных таблиц. |
|
Сообщ.
#18
,
|
|
|
|
Цитата SexGenius @ Есть таблица - Шкаф, и есть несколько таблиц Аппарат1, Аппарат2, Аппарат3 ... АппаратN. Во всех таблицах есть поле НомерШкафа Цитата SexGenius @ У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание. И в Аппаратах есть поле Здание. Bas, похоже надо более грамотно спроектировать сами таблицы... |
|
Сообщ.
#20
,
|
|
|
|
Хорошо, раз так то как, по вашему, будет
Цитата ? более грамотно спроектировать сами таблицы... В упрощенном варианте описываемые объекты выглядят так. Есть Здания , их около 300. В каждом здании может быть произвольно количество шкафов (от одного до 30 к примеру). Каждый шкаф содержит разное количество Аппаратов разных типов. Это надо укатать в БД. Я сделал первую таблицу "Здания". В ней есть поле "Номер здания" и "Адрес здания". Но в моей проге мне надо отобразить для каждого здания количество и инвентарный номер шкафа. Для этого я создаю вторую таблицу и в которой есть поля "Номер здания", "номер шкафа в здании" и "инвентарный номер". Но в каждом шкафе есть аппараты. Аппаратов произвольное количество от 1 до 10. Аппараты бывают разных видов (разные устройства) . Поэтому я создаю еще ряд таблиц для каждого вида аапарата, в каждой из которых есть поля "Номер здания", "номер шкафа в здании" и ряд специфичных для этого вида устройства параметров. Как же мне иначе сделать структуру БД, что она была Цитата ? более грамотно спроектирована |
|
Сообщ.
#22
,
|
|
|
|
Одна байда этот самый код должен формироваться по какому-то алгоритму из того же номера здания и номера шкафа в здании. Какой смысл вообще вводить этот самы й код ? Только лишь затем чтобы связываемое поле было уникально ? А по другому никак ?
Мои таблицы нельзя заставить работать связано ? Добавлено И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ? Да так чтобы код сам формировался . Иначе его придется в Дельфи формировать .... И все тогда теряет смысл.... |
|
Сообщ.
#23
,
|
|
|
|
Цитата SexGenius, 29.08.2005, 17:59:52, 840369 А по другому никак ? Мои таблицы нельзя заставить работать связано ? Я связал свои таблицы по двум полям, как писал Coala . Работает !!!! Цитата SexGenius, 29.08.2005, 17:59:52, 840369 Одна байда этот самый код должен формироваться по какому-то алгоритму из того же номера здания и номера шкафа в здании. Какой смысл вообще вводить этот самы й код ? Вот этот вопрос остается в силе! Жду ответа. Цитата SexGenius, 29.08.2005, 17:59:52, 840369 И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ? Ну , вобщем-то и этот тоже. |
|
Сообщ.
#24
,
|
|
|
|
Цитата SexGenius @ Этот код может формироваться каким угодно образом и отношения к данным, которыми ты манипулируешь, не должен иметь совсем. Единственное его предназначение - связывать между собой значения в разных таблицах. Это нужно для того, чтобы избежать лишней работы вот здесь:Одна байда этот самый код должен формироваться по какому-то алгоритму из того же номера здания и номера шкафа в здании. Какой смысл вообще вводить этот самы й код ? Цитата То есть при изменении названия шкафа тебе ничего больше не придется менять, т.к. этот шкаф по-прежнему будет соответствовать тем же записям в таблице аппаратов что и раньше.1. Чтобы при изменении НомераШкафа в таблице Шкаф автоматически менялось этоже поле в таблицах Аппаратов. Цитата SexGenius @ Задай этому полю тип "Счетчик" (в англ. версии кажется "Autoincrement") и его значение будет автоматически увеличиваться при добавлении новых записей в таблицу. И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ? Добавлено P.S. Oбщепринято, что во всех таблицах роль такого кода выполняет поле с именем id |
|
Сообщ.
#25
,
|
|
|
|
Братцы, а если спроектировать базу так:
ЗДАНИЯ Z_ID primary key адрес и все остальное ШКАФЫ S_ID primary key Z_ID foreign key referenced ЗДАНИЯ и все остальное АППАРАТЫ A_ID primary key S_ID foreign key referenced ШКАФЫ и все остальное ну и расписать SQLи на выборку и изменение данных (в том числе и каскадные) |
|
Сообщ.
#26
,
|
|
|
|
Вариант Коалы мне больше нравится - без дополнительной таблицы
|
|
Сообщ.
#27
,
|
|
|
|
Надо сделать так, чтобы первичный ключ был уникальный и связь шкаф-аппараты была "одна-ко-многим".
Цитата SexGenius @ А как же сделать чтобы работало с повторяющимися номерами шкафа в таблице Шкафы ? У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание. И в Аппаратах есть поле Здание. Т.е. первичным ключом "Шкафов" будет: <номер шкафа> и <здание>. Вместе эта группа будет однозначно ижентияифировать конкретный шкаф (и только один шкаф). И внешний ключ (ключ связи) для таблицы "аппаратов" должен содержат первичный ключ таблицы "шкафы". |
|
Сообщ.
#28
,
|
|
|
|
Цитата RuSA @ У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание т.е. ситуация такая что-ли: шкаф здание 1 1 2 1 3 1 1 2 2 2 3 2 ....... |
|
Сообщ.
#29
,
|
|
|
|
Да , ситуация такая, но я теперь переделал свои таблицы так , как советовал ты и J. Bravo . Спасибо всем
Работает |
|
Сообщ.
#30
,
|
|
|
|
Цитата Coala @ ШКАФЫ S_ID NOT NULL Z_ID foreign key referenced ЗДАНИЯ primary key (Z_ID, S_ID) |