@Alksar

Дублирование в БД. Как победить?

1a8da2da9dcc4c628f19421166cbd786.png

Напало дублирование, видимо из-за неверного проектирования.

Комментарии к схеме:
- к заказу (Order) привязываются услуги (Service) с помощью таблицы (Order_Service)
- каждая услуга заказа (Order_Service) выполнена сотрудником, связь: таблица (Employee_Order_Service)
- услуги представлены двух видов:
+ перевод (TranslationInfo), хранит имя текста, который переводят, языки с которого и на который переводят (LangFrom, LangTo)
+ заверение перевода (NotarialInfo), хранит, также имя текста, языки, кол-во копий заверения.

Но тут такой изъянище... Такая проблема, посмотрите, вид услуги "перевод" и "заверение" содержат много одинаковых полей, а именно: имя файла, язык 'с', язык 'на'. Поэтому при изменении, к примеру, имени текста - нужно будет менять его и в TranslationInfo и в NotarialInfo. Заверять можно только те тексты, которые переводились, так что лучше было бы разместить поле "CopyCount" в таблице "TranslationInfo", а таблицу "Notarial" не создавать вовсе! Но у заверения должен быть свой исполнитель, своя цена. У перевода тоже, соответственно, свой исполнитель и цена.
Как быть? Как исправить?
  • Вопрос задан
  • 1037 просмотров
Решения вопроса 2
@kir_vesp
Web Developer
Создать два связанных поля: Employe_translation_id, Employe_notarial_id, к примеру. В остальном объединить. И поставить тригеры на то переведен ли документ, если да, то заверен ли?

UPD: Пусть у вас будет связь один-ко-многим от ServiceInfo к OrderService. Когда производиться заверение, вы просто добавляете для связи ещё одну запись из Order_Service и заполняете поле CopyCount. Таким образом, наличие значения в поле CopyCount и связь с двумя записями из Order_service(Два айдишника в поле Order_Service_id) будет являться условием для определения заверенности данного документа.
Ответ написан
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Тут простое наследование, кмк. Создайте базовую табличку ServiceInfo с общими для всех подтабличек полями. А табличку TranslationServiceInfo создайте с полем parent_id - FK на ServiceInfo, NotarialServiceInfo - аналогично. В них добавьте полей, специфичных для каждой. Когда будете выбирать из TranslationServiceInfo, то основные поля тяните связкой из ServiceInfo (к слову в ОРМ джанго это можно сделать через django-model-utils).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@maxyc_webber
Web-программист
Полностью не вдавался вопрос.
Тригеры можт помогут? Бихэвиоры?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект