На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Нужна помощь с проектированием архитектуры БД
    Здравствуйте, помогите реорганизовать существующую таблицу под новые требования:
    Есть база данных на предприятиях (на структурных подразделениях) с данными только о текущем подразделении:
    База MySQL
    ExpandedWrap disabled
      SET NAMES 'utf8';
      USE PCSBD;
       
      --
      -- Описание для таблицы downtime
      --
      CREATE TABLE downtime(
        IndexElement SMALLINT (6) NOT NULL DEFAULT -1,
        DateTim DATETIME NOT NULL,
        downtime_min INT (11) NOT NULL DEFAULT 0,
        operationtime_min INT (11) NOT NULL DEFAULT 0,
        column1 INT (11) DEFAULT 0,
        prjID VARCHAR (20) DEFAULT NULL
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы log_parametrs
      --
      CREATE TABLE log_parametrs(
        ind INT (11) NOT NULL AUTO_INCREMENT,
        adrrController INT (4) NOT NULL DEFAULT 0,
        Port INT (2) DEFAULT NULL,
        IndexElement INT (4) NOT NULL DEFAULT -1,
        portValue INT (2) NOT NULL DEFAULT -1,
        portMeter INT (11) DEFAULT -1,
        date_0 DATE NOT NULL,
        time_0 TIME NOT NULL,
        prjID VARCHAR (20) DEFAULT NULL,
        PRIMARY KEY (ind)
      )
      ENGINE = MYISAM
      AUTO_INCREMENT = 1
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы meters
      --
      CREATE TABLE meters(
        id INT (11) NOT NULL AUTO_INCREMENT,
        IndexElement INT (10) NOT NULL DEFAULT 0,
        dates DATETIME DEFAULT NULL,
        date_day DATE DEFAULT NULL,
        date_time TIME DEFAULT NULL,
        meter INT (11) DEFAULT NULL,
        metertype VARCHAR (20) DEFAULT NULL,
        prjID VARCHAR (20) DEFAULT NULL,
        PRIMARY KEY (id),
        INDEX IndexElement USING BTREE (IndexElement),
        INDEX id USING BTREE (id)
      )
      ENGINE = MYISAM
      AUTO_INCREMENT = 1
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci
      PACK_KEYS = 1;
       
      --
      -- Описание для таблицы ProgVerToUpdates
      --
      CREATE TABLE ProgVerToUpdates(
        ProgramVer VARCHAR (20) DEFAULT NULL,
        BDVer VARCHAR (20) DEFAULT NULL,
        LastUpdates VARCHAR (20) DEFAULT NULL
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы Project
      --
      CREATE TABLE Project(
        ID INT (11) NOT NULL AUTO_INCREMENT,
        prjID VARCHAR (20) DEFAULT NULL,
        prjName VARCHAR (50) DEFAULT NULL,
        prjPath TEXT DEFAULT NULL,
        lastEdit VARCHAR (20) DEFAULT NULL,
        lastOpen VARCHAR (20) DEFAULT NULL,
        PRIMARY KEY (ID)
      )
      ENGINE = MYISAM
      AUTO_INCREMENT = 15
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы tb_dates
      --
      CREATE TABLE tb_dates(
        id INT (11) NOT NULL,
        param VARCHAR (255) DEFAULT NULL,
        dtime DATETIME DEFAULT NULL,
        adr INT (11) DEFAULT NULL,
        PRIMARY KEY (id)
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы tb_shem
      --
      CREATE TABLE tb_shem(
        col INT (11) NOT NULL,
        num INT (11) DEFAULT NULL,
        last_prj MEDIUMTEXT DEFAULT NULL,
        prj_param MEDIUMTEXT DEFAULT NULL,
        PRIMARY KEY (col)
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci
      ROW_FORMAT = DYNAMIC;
       
      --
      -- Описание для таблицы UserLogs
      --
      CREATE TABLE UserLogs(
        User VARCHAR (255) NOT NULL,
        DateTim DATETIME DEFAULT NULL,
        Operations VARCHAR (1024) DEFAULT NULL,
        Details VARCHAR (1024) DEFAULT NULL,
        Clas INT (3) DEFAULT 0
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы Users
      --
      CREATE TABLE Users(
        User VARCHAR (255) NOT NULL,
        `Password` VARCHAR (255) NOT NULL,
        USER_PRIVILEGES VARCHAR (20) NOT NULL,
        UNIQUE INDEX User USING BTREE (User)
      )
      ENGINE = MYISAM
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы work_shifts
      --
      CREATE TABLE work_shifts(
        id INT (11) NOT NULL AUTO_INCREMENT,
        Shifts INT (2) DEFAULT NULL,
        StartTime TIME DEFAULT NULL,
        timeLength INT (6) DEFAULT NULL,
        moreInt_0 INT (11) DEFAULT NULL,
        moreInt_1 INT (11) DEFAULT NULL,
        moreFloat_0 FLOAT DEFAULT NULL,
        moreFloat_1 FLOAT DEFAULT NULL,
        moreTime TIME DEFAULT NULL,
        moreDate DATE DEFAULT NULL,
        moreString VARCHAR (50) DEFAULT NULL,
        prjID VARCHAR (20) DEFAULT NULL,
        PRIMARY KEY (id)
      )
      ENGINE = MYISAM
      AUTO_INCREMENT = 53
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci;
       
      --
      -- Описание для таблицы works
      --
      CREATE TABLE works(
        id INT (11) NOT NULL AUTO_INCREMENT,
        IndexElement INT (10) NOT NULL DEFAULT 0,
        dates DATETIME DEFAULT NULL,
        date_day DATE DEFAULT NULL,
        date_time TIME DEFAULT NULL,
        on_e TINYINT (1) DEFAULT NULL,
        off_e TINYINT (1) DEFAULT NULL,
        starterror TINYINT (1) DEFAULT NULL,
        prjID VARCHAR (20) DEFAULT NULL,
        PRIMARY KEY (id),
        INDEX IndexElement USING BTREE (IndexElement),
        INDEX id USING BTREE (id),
        INDEX inddatetime USING BTREE (dates)
      )
      ENGINE = MYISAM
      AUTO_INCREMENT = 98746163
      CHARACTER SET cp1251
      COLLATE cp1251_general_ci
      PACK_KEYS = 1;
       
      /*!40014 SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS */;



    Сейчас требуют установить эту БД еще на другие структурные подразделения и в главный офис
    Структура предприятия :
    главный офис
    |__региональный офис 1
    |_____________ структурные подразделения 1
    |_____________ структурные подразделения 2
    |_____________ структурные подразделения N
    …………………………..
    |__региональный офис N
    |_____________ структурные подразделения 1
    |_____________ структурные подразделения 2
    |_____________ структурные подразделения N

    надо создать свои БД под все подразделения и офисы а затем объединить все в одну БД в главный офис.
    вот так : Прикреплённый файлПрикреплённый файл02.gif (16,16 Кбайт, скачиваний: 561)
    брать данные только с таблиц
    Users, works, Project, tb_dates, tb_shem
    И ложить/класть на уровень выше
    Вот не знаю как правильно изменить существующую БД с данными так чтобы не повредить данные и так чтоб в главном офисе было понятно с какого структурного подразделения данные
    Сообщение отредактировано: Penumbra -
      Поскольку мы все поголовно - сотрудники твоей организации, ежедневно работающие с этой базой, объяснять нам, что в неё запихано и с какой логикой, конечно, не требуется...
        есть программа которая собирает данные с устройств и заполняет ими БД

        Таблица Users - пользователи которые имеют доступ к системе (логин пароль права доступа)
        в таблицах tb_dates, tb_shem информация об этих устройствах
        в таблице works журнал работы утройств
        в таблице Project отчетные данные
        теперь необходимо чтоб данные из этих таблиц на "структурном подразделении1" и "структурном подразделении N" собирались в такойже БД, но на "региональном офисе" только с той разницей что в БД на региональном офисе можно было определить с какого структурного подразделения эти данные
          Цитата Penumbra @
          Вот не знаю как правильно изменить существующую БД
          Никак. Надо новую БД делать. С учётом ляпов старой БД.
          Цитата Penumbra @
          в БД на региональном офисе можно было определить с какого структурного подразделения эти данные
          А кто мешает соответствующие словарик и айди добавить?
          ЗЫ -
          Цитата Akina @
          Поскольку мы все поголовно - сотрудники твоей организации...
          Более того, сотрудники подразделения, которое эту БД ведёт :whistle: ...
            Цитата #SI# @
            А кто мешает соответствующие словарик и айди добавить?

            поподробней можно? ибо я и так думал про это но не знаю куда запихнуть
            Цитата #SI# @
            Никак. Надо новую БД делать. С учётом ляпов старой БД.

            ведь можно в существующую таблицу добавить колонку еще одну, но тогда, наверное, придется все данные заново добавлять
              0ффтоп
              чегото форум ошибку выдает
              ExpandedWrap disabled
                Mail Error!
                 
                Could not send the email
                Failed at 'mail' command
              Сообщение отредактировано: Penumbra -
                Цитата Penumbra @
                но не знаю куда запихнуть
                В таблицы данных - куда же ещё!
                ЗЫ - Mail Error тоже был. Тоже удалил дубль :D !
                ---
                Опять то же самое!
                ЗЗЫ - а при редактировании - всё ОК! Следующий пост - дубль, посему щяс удалю.
                Сообщение отредактировано: #SI# -
                  А вот тут удалён дубль!
                  Админы на масленицу перебрали??? :whistle:
                  Сообщение отредактировано: #SI# -
                    Penumbra чуть более высокоуровневая модель (ER диаграмма, к примеру) дала бы больше информации, чем этот скрипт.
                    Самое простое решение, с моей точки зрения, БД одна, сервер доступен 24/7 каждое подразделение пишет данные со своим ID подразделения в ЕДИНУЮ БД.
                    Но тут уже звучал ряд вопросов про "процессы" которые формируют/используют "данные". Без них подсказать куда копать крайне сложно.
                    К примеру, если данные недельной давности для головного офиса есть гуд, это одно. Если данные секундной давности считаются устаревшими - то твоя схема с кучей "биде" обречена на провал.
                    Сообщение отредактировано: Павел Калугин -
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0320 ]   [ 17 queries used ]   [ Generated: 27.04.24, 00:56 GMT ]