На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Работа со связаными таблицами , Как лучше всего организовать сабж
    Цитата SexGenius @
    Но не может быть только записей с одинаковыми ка номером шкафа так и здания

    Создай Primary Key по двум полям
      Цитата SexGenius @
      А как же сделать чтобы работало с повторяющимися номерами шкафа в таблице Шкафы ?

      Явно, надо почитать чтото о 4-х типах нормализованных таблиц.
        Цитата SexGenius @
        Есть таблица - Шкаф, и есть несколько таблиц Аппарат1, Аппарат2, Аппарат3 ... АппаратN. Во всех таблицах есть поле НомерШкафа

        Цитата SexGenius @
        У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание. И в Аппаратах есть поле Здание.

        Bas, похоже надо более грамотно спроектировать сами таблицы... :huh:
            Хорошо, раз так то как, по вашему, будет
            Цитата
            более грамотно спроектировать сами таблицы...
            ?
            В упрощенном варианте описываемые объекты выглядят так.
            Есть Здания , их около 300. В каждом здании может быть произвольно количество шкафов (от одного до 30 к примеру).
            Каждый шкаф содержит разное количество Аппаратов разных типов.
            Это надо укатать в БД.

            Я сделал первую таблицу "Здания". В ней есть поле "Номер здания" и "Адрес здания".
            Но в моей проге мне надо отобразить для каждого здания количество и инвентарный номер шкафа.
            Для этого я создаю вторую таблицу и в которой есть поля "Номер здания", "номер шкафа в здании" и "инвентарный номер".
            Но в каждом шкафе есть аппараты. Аппаратов произвольное количество от 1 до 10. Аппараты бывают разных видов (разные устройства) .
            Поэтому я создаю еще ряд таблиц для каждого вида аапарата, в каждой из которых есть поля "Номер здания", "номер шкафа в здании" и ряд специфичных для этого вида устройства параметров.

            Как же мне иначе сделать структуру БД, что она была
            Цитата
            более грамотно спроектирована
            ?
              Примерно так
              Прикреплённый файлПрикреплённый файл_____.jpg (12.96 Кбайт, скачиваний: 312)
                Одна байда этот самый код должен формироваться по какому-то алгоритму из того же номера здания и номера шкафа в здании. Какой смысл вообще вводить этот самы й код ? Только лишь затем чтобы связываемое поле было уникально ? А по другому никак ?
                Мои таблицы нельзя заставить работать связано ?

                Добавлено
                И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ? Да так чтобы код сам формировался . Иначе его придется в Дельфи формировать .... И все тогда теряет смысл....
                  Цитата 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
                  И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ?


                  Ну , вобщем-то и этот тоже.
                    Цитата SexGenius @
                    Одна байда этот самый код должен формироваться по какому-то алгоритму из того же номера здания и номера шкафа в здании. Какой смысл вообще вводить этот самы й код ?
                    Этот код может формироваться каким угодно образом и отношения к данным, которыми ты манипулируешь, не должен иметь совсем. Единственное его предназначение - связывать между собой значения в разных таблицах. Это нужно для того, чтобы избежать лишней работы вот здесь:
                    Цитата
                    1. Чтобы при изменении НомераШкафа в таблице Шкаф автоматически менялось этоже поле в таблицах Аппаратов.
                    То есть при изменении названия шкафа тебе ничего больше не придется менять, т.к. этот шкаф по-прежнему будет соответствовать тем же записям в таблице аппаратов что и раньше.
                    Цитата SexGenius @
                    И еще, если всё-таки создания поля с кодом не избежать, то как его создать в Ассесе ?
                    Задай этому полю тип "Счетчик" (в англ. версии кажется "Autoincrement") и его значение будет автоматически увеличиваться при добавлении новых записей в таблицу.

                    Добавлено
                    P.S. Oбщепринято, что во всех таблицах роль такого кода выполняет поле с именем id
                      Братцы, а если спроектировать базу так:

                      ЗДАНИЯ
                      Z_ID primary key
                      адрес
                      и все остальное

                      ШКАФЫ
                      S_ID primary key
                      Z_ID foreign key referenced ЗДАНИЯ
                      и все остальное

                      АППАРАТЫ
                      A_ID primary key
                      S_ID foreign key referenced ШКАФЫ
                      и все остальное

                      ну и расписать SQLи на выборку и изменение данных (в том числе и каскадные) :(
                        Вариант Коалы мне больше нравится - без дополнительной таблицы
                          Надо сделать так, чтобы первичный ключ был уникальный и связь шкаф-аппараты была "одна-ко-многим".

                          Цитата SexGenius @
                          А как же сделать чтобы работало с повторяющимися номерами шкафа в таблице Шкафы ? У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание. И в Аппаратах есть поле Здание.

                          Т.е. первичным ключом "Шкафов" будет: <номер шкафа> и <здание>. Вместе эта группа будет однозначно ижентияифировать конкретный шкаф (и только один шкаф).

                          И внешний ключ (ключ связи) для таблицы "аппаратов" должен содержат первичный ключ таблицы "шкафы".
                            Цитата RuSA @
                            У меня в таблице Шкафы они будут повторяться, так как там еще есть поле Здание

                            т.е. ситуация такая что-ли:
                            шкаф здание
                            1 1
                            2 1
                            3 1
                            1 2
                            2 2
                            3 2
                            .......
                              Да , ситуация такая, но я теперь переделал свои таблицы так , как советовал ты и J. Bravo . Спасибо всем ;) Работает
                                Цитата Coala @
                                ШКАФЫ
                                S_ID NOT NULL
                                Z_ID foreign key referenced ЗДАНИЯ


                                primary key (Z_ID, S_ID)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.0967 ]   [ 16 queries used ]   [ Generated: 10.07.26, 15:13 GMT ]