Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: Общие вопросы > Нужна помощь с проектированием архитектуры БД


Автор: Penumbra 21.02.15, 13:33
Здравствуйте, помогите реорганизовать существующую таблицу под новые требования:
Есть база данных на предприятиях (на структурных подразделениях) с данными только о текущем подразделении:
База MySQL
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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 (, : 563)
брать данные только с таблиц
Users, works, Project, tb_dates, tb_shem
И ложить/класть на уровень выше
Вот не знаю как правильно изменить существующую БД с данными так чтобы не повредить данные и так чтоб в главном офисе было понятно с какого структурного подразделения данные

Автор: Akina 21.02.15, 18:37
Поскольку мы все поголовно - сотрудники твоей организации, ежедневно работающие с этой базой, объяснять нам, что в неё запихано и с какой логикой, конечно, не требуется...

Автор: Penumbra 21.02.15, 20:57
есть программа которая собирает данные с устройств и заполняет ими БД

Таблица Users - пользователи которые имеют доступ к системе (логин пароль права доступа)
в таблицах tb_dates, tb_shem информация об этих устройствах
в таблице works журнал работы утройств
в таблице Project отчетные данные
теперь необходимо чтоб данные из этих таблиц на "структурном подразделении1" и "структурном подразделении N" собирались в такойже БД, но на "региональном офисе" только с той разницей что в БД на региональном офисе можно было определить с какого структурного подразделения эти данные

Автор: #SI# 21.02.15, 21:55
Цитата Penumbra @
Вот не знаю как правильно изменить существующую БД
Никак. Надо новую БД делать. С учётом ляпов старой БД.
Цитата Penumbra @
в БД на региональном офисе можно было определить с какого структурного подразделения эти данные
А кто мешает соответствующие словарик и айди добавить?
ЗЫ -
Цитата Akina @
Поскольку мы все поголовно - сотрудники твоей организации...
Более того, сотрудники подразделения, которое эту БД ведёт :whistle: ...

Автор: Penumbra 21.02.15, 22:17
Цитата #SI# @
А кто мешает соответствующие словарик и айди добавить?

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

ведь можно в существующую таблицу добавить колонку еще одну, но тогда, наверное, придется все данные заново добавлять

Автор: Penumbra 21.02.15, 22:19
0ффтоп
чегото форум ошибку выдает
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Mail Error!
     
    Could not send the email
    Failed at 'mail' command

Автор: #SI# 21.02.15, 22:31
Цитата Penumbra @
но не знаю куда запихнуть
В таблицы данных - куда же ещё!
ЗЫ - Mail Error тоже был. Тоже удалил дубль :D !
---
Опять то же самое!
ЗЗЫ - а при редактировании - всё ОК! Следующий пост - дубль, посему щяс удалю.

Автор: #SI# 21.02.15, 22:32
А вот тут удалён дубль!
Админы на масленицу перебрали??? :whistle:

Автор: Павел Калугин 24.02.15, 14:05
Penumbra чуть более высокоуровневая модель (ER диаграмма, к примеру) дала бы больше информации, чем этот скрипт.
Самое простое решение, с моей точки зрения, БД одна, сервер доступен 24/7 каждое подразделение пишет данные со своим ID подразделения в ЕДИНУЮ БД.
Но тут уже звучал ряд вопросов про "процессы" которые формируют/используют "данные". Без них подсказать куда копать крайне сложно.
К примеру, если данные недельной давности для головного офиса есть гуд, это одно. Если данные секундной давности считаются устаревшими - то твоя схема с кучей "биде" обречена на провал.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)