powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / как вы храните архивы
11 сообщений из 11, страница 1 из 1
как вы храните архивы
    #38546790
kakos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы чтобы вы поделились опытом.
есть небольшой проект - система взвешивания машин на предприятии (машина ввозит на территорию материал и ее нужно взвесить).
Создана маленькая база. в ней есть таблицы машин(номер, вес, марка), материал(название, плотность) и т. д.
Ну и сам архив. в нем нужн фиксировать какая машина въехала, чаво и сколько привезла, снимки с камер и т. д.
Вопрос вот в чем: по уму, а таблице "архив" нужно хранить лишь ссылки на машины, материалы и прочее, т.е. FK.
Но, таблицы с машинами, материалами работники пополнять часто не очень-то горят желанием. и просто печатают в комбобоксах номера. или наоборот, удаляю "ненужные" машины из базы почем зря.
Поэтому, на данном этапе, в таблице "архив" у меня дублируются поля из таблиц машин и материалов. Как вы поступаете в похожих ситуациях. Это нормальная практика ведения архива вообще, ведь это не "по правилам" реляционных БД.???
...
Рейтинг: 0 / 0
как вы храните архивы
    #38546812
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kakos,

давай схемы или ddl.
я не могу сообразить о чем это все.
...
Рейтинг: 0 / 0
как вы храните архивы
    #38546819
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, что значит "удаляют почем зря"? Они у вас все под админскими учетками сидят? Права у них отнимите на DELETE - и сразу перестанут удалять, вот увидите.

Далее, ваша проблема немного в другом - у вас на входе грязные данные, которые надо сначала почистить, прежде чем загонять в реляционное хранилище. В исходной БД может вообще никаких FK не быть, с вашим-то инпутом.

P.S. Но, честно говоря, в 2014 году номера машин пора бы уже автораспознавать с камер...
...
Рейтинг: 0 / 0
как вы храните архивы
    #38546910
kakos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,

1. пожалел заказчик денюжку на автораспознавание.
2. запретить удалять можно, согласен. Только пользователю не нравится огромный список с машинами или материалами, например. много наемных машин, и они часто увольняются и все. по сути, они не нужны оператору, а в таблице они будут.
А если таблицы "архив" и "машины" будут связаны, удалять машины вообще будет нельзя. Ведь обязательно понадобятся старые архивы, и в них не будет ссылки на авто. это тоже плохо.
конечно можно завести невидимую таблицу - с группировками по авто (старые авто, актуальные), которые не будет видеть пользователь. и при удалении машины, просто изменять ей ключ "актуальная" на "старая". Но стоит ли оно того??
просто база растет медленно, и лишнюю информацию в таблице "архив" хранить не накладно.
Сейчас все устраивает, и проблем нет. но на душе хреново:) ведь база не оптимизирована.

Короче, охото чтобы успокоили:)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE WEIGHTS (
    ID              INTEGER NOT NULL,
    DT              TIMESTAMP NOT NULL,
    CAR_SNAPSHOT_F  BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    CAR_SNAPSHOT_B  BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    C_NUMBER        SHORT_NAME NOT NULL /* SHORT_NAME = VARCHAR(10) */,
    C_MODEL         "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    C_WEIGHT        DOUBLE PRECISION NOT NULL,
    D_NAME          "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    EVENT_TYPE      BOOLEAN /* BOOLEAN = SMALLINT NOT NULL */,
    M_TYPE          "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    DISTRIBUTOR     "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    GROSS           DOUBLE PRECISION NOT NULL,
    INVOICE_NUM     INTEGER NOT NULL,
    M_DENSITY       DOUBLE PRECISION NOT NULL
);



Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE CARS (
    ID            INTEGER NOT NULL,
    NUMBER        SHORT_NAME NOT NULL /* SHORT_NAME = VARCHAR(10) */,
    MODEL         "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    EMPTY_WEIGHT  DOUBLE PRECISION NOT NULL
);



первая таблица - взвешивания. вторая - машины. все примитивно:)
...
Рейтинг: 0 / 0
как вы храните архивы
    #38546932
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kakosПоэтому, на данном этапе, в таблице "архив" у меня дублируются поля из таблиц машин и материалов. Как вы поступаете в похожих ситуациях. Это нормальная практика ведения архива вообще, ведь это не "по правилам" реляционных БД.???
Это не очень хорошо - а что будет, если при "печати в комбобоксе номера" оператор опечатается?
...
Рейтинг: 0 / 0
как вы храните архивы
    #38547065
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kakosПоэтому, на данном этапе, в таблице "архив" у меня дублируются поля из таблиц машин и материалов. Как вы поступаете в похожих ситуациях. Это нормальная практика ведения архива вообще, ведь это не "по правилам" реляционных БД.???
IMHO Тут все от потребностей бизнеса. Нужно ли строить более-менее нормальную аналитику, насколько должен быть "чистыми" результаты поиска по данным полем.

Это все может сказать только владелец бизнеса, который заинтересован в результатах хранения данного архива. Если архив нужен "что бы был", излишне напрягать операторов возможно смысла нет, всем пофиг и забить нано болт. Если же архив нужен для какой-то аналитики - то тогда нужно напрягать операторов, что бы там были более-менее чистые данные или отдельно сажать девочку эти данные потом "чистить" или х.з. что еще. Но такие вопросы надо решать не на форуме, где никто о специфики задачи знать не может, а разговаривая с заказчиком. IMHO

И тот и другой подход имеет свои достоинства и недостатки. Что использовать - зависит от потребностей бизнеса заказчика в данный момент и в будущем. IMHO
...
Рейтинг: 0 / 0
как вы храните архивы
    #38547067
kakos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

Да, для отчета - это беда. эту возможность ( ввод в комбобоксе произвольного значения ) я тоже могу "почикать".
Тем не менее, как бы вы поступили при удалении ненужных машин, материалов?
а) оставить как есть?
б) в таблице "машины" завести метку - поле что машина удалена , хранить все машины в базе и просто не показывать "удаленные"?
как делается на практике, в общем:)
в) при удалении записи из таблицы "машины", засовывать вместо конкретной машины значение по-умолчанию какое-нибудь?


как правильно, как делаете вы, программеры?
...
Рейтинг: 0 / 0
как вы храните архивы
    #38547070
kakos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Спасибо, огромное.
...
Рейтинг: 0 / 0
как вы храните архивы
    #38547965
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. запретить удалять можно, согласен. Только пользователю не нравится огромный список с машинами или материалами, например. много наемных машин, и они часто увольняются и все. по сути, они не нужны оператору, а в таблице они будут.


Да и пусть будут, в чём проблема-то ?


А если таблицы "архив" и "машины" будут связаны, удалять машины вообще будет нельзя. Ведь обязательно понадобятся старые архивы, и в них не будет ссылки на авто. это тоже плохо.
конечно можно завести невидимую таблицу - с группировками по авто (старые авто, актуальные), которые не будет видеть


Не надо вообще никаких архивов, никаких старых авто. Сделай одну таблицу машин. Одну таблицу весов или чего там у тебя.


пользователь. и при удалении машины, просто изменять ей ключ "актуальная" на "старая". Но стоит ли оно того??

Нет, данные вообще не стоит удалять.



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE WEIGHTS (
    ID              INTEGER NOT NULL,
    DT              TIMESTAMP NOT NULL,
    CAR_SNAPSHOT_F  BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    CAR_SNAPSHOT_B  BLOB SUB_TYPE 0 SEGMENT SIZE 80,

Тут нарушение 1НФ, лучше вынести  CAR_SNAPSHOT_XXX в отдельную таблицу, 1:N к данной. С доп.полем в ключ "тип снимка" (перёд, зад, бок, верх, и т.д.).

    C_NUMBER        SHORT_NAME NOT NULL /* SHORT_NAME = VARCHAR(10) */,
    C_MODEL         "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,

должна быть ссылка на CARS , а не поля из CARS . Ссылка на PK таблицы CARS 


    C_WEIGHT        DOUBLE PRECISION NOT NULL,

Назначение остальных полей туманно, 

    D_NAME          "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    EVENT_TYPE      BOOLEAN /* BOOLEAN = SMALLINT NOT NULL */,
    M_TYPE          "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    DISTRIBUTOR     "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,
    GROSS           DOUBLE PRECISION NOT NULL,
    INVOICE_NUM     INTEGER NOT NULL,
    M_DENSITY       DOUBLE PRECISION NOT NULL
);



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE CARS (
    ID            INTEGER NOT NULL,
    NUMBER        SHORT_NAME NOT NULL /* SHORT_NAME = VARCHAR(10) */,
    MODEL         "NAMES" NOT NULL /* "NAMES" = VARCHAR(128) */,

Напрашивается справочник моделей машин.


    EMPTY_WEIGHT  DOUBLE PRECISION NOT NULL
);
...
Рейтинг: 0 / 0
как вы храните архивы
    #38547966
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kakos как правильно, как делаете вы, программеры?

Просто вообще никогда ничего не удаляй.
...
Рейтинг: 0 / 0
как вы храните архивы
    #38548058
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kakosб) в таблице "машины" завести метку - поле что машина удалена , хранить все машины в базе и просто не показывать "удаленные"?
как делается на практике, в общем:)

Ну и правильно делается, вполне хороший вариант.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / как вы храните архивы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]