Схема базы данных для системы отслеживания дефектов

#sql-server #database-design #database-schema

Вопрос:

Я хочу создать следующую систему обнаружения дефектов в SQL Server. Интерфейс будет построен с использованием ASP.NET . но в настоящее время я пытаюсь понять, как построить таблицы базы данных, чтобы установить связь между этими таблицами.

система позволяет создать отчет >>> выберите тип отчета,идентификатор оборудования и другую информацию >>>>>>> выберите нужные категории (выбрав Y или N) >>>>>>>>>>> и для выбранной категории >>>>>>>>>>>>>>> выберите сведения о дефекте и введите комментарии..

введите описание изображения здесь

Я разработал эту схему (имена таблиц и столбцов).:-

Оборудование

  • ID
  • Имя

Оператор

  • ID
  • Имя

Тип отчета

  • ID
  • Имя

Сообщить

  • ID
  • Идентификатор оператора (от FK до оператора),
  • Имя
  • Идентификатор оборудования (FK для оборудования)
  • Идентификатор типа (FK для типа отчета)
  • Дата/Время
  • Комментарии

Категория отчета

  • ID
  • Имя

Часть

  • ID
  • Имя

Категория отчета

  • Идентификатор отчета (от FK до отчетов) —>PK
  • Идентификатор категории (от FK до категории) —> PK
  • Да/нет

DefectDetailesLookup

  • Идентификатор детали (от FK до детали) —> PK
  • Идентификатор Cateogry (от FK до Cateogry) —> PK

Сообщить о деталях обнаружения

  • ReportId (FK для отчета) —> PK
  • Идентификатор категории (от FK до категории) —> PK
  • Идентификатор детали (FK для детали)—>PK
  • Комментарий
  • Да/Нет

итак, действительна ли схема? или я что-то упускаю? Спасибо

Комментарии:

1. Я думаю, ты на правильном пути. Единственное, что бросается в глаза, — это повсеместное использование ID. Если есть внешний идентификатор, который вы можете использовать, например идентификатор оператора (я предполагаю), отлично. Но создание идентификаторов только ради них самих-это потенциальная ответственность. Например, действительно ли вам нужны две детали с разными идентификаторами, называемые штифтами или болтами ?

2. Схема сильно зависит от идентифицированных сущностей и отношений. Основываясь на вашем описании, я не вижу никаких проблем. На этом этапе, возможно, лучше всего выполнить первую итерацию вашего приложения и выпустить его для тестирования, чтобы вы могли получить обратную связь

Ответ №1:

Это сработало бы.

Есть несколько вещей, о которых стоит подумать для будущей изменчивости: Без полного понимания области ваших приложений: Подумайте о составных PKS. Использование их не обязательно является плохой практикой, но если вы их используете, убедитесь, что они являются неотъемлемой частью идентичности Сущностей. И если вы не уверены, я бы рекомендовал удалить их и вместо этого использовать собственный столбец идентификаторов для вашей сущности. В противном случае у вас обязательно будет, т. е. Категория для каждого отчета.

Если вы не зависите от существующей базы данных и предполагаете, что у вас уже есть настроенные классы репозитория, сначала попробуйте ef core и code. Также DDD (доменный дизайн) — достойное чтение. Современные модели БД в основном управляются кодом/доменом. Время, когда dbs диктовали, как должен быть написан код, прошло.

Помимо этого:

  1. небольшая опечатка здесь: DefectDetail_e_sLookup
  2. Категория отчета => существует два раза. Я думаю, что верхняя — это просто категория
  3. дайте вашим столбцам » да » / » нет » значимые имена, например isDisplayed

Ответ №2:

 -- Defect DEF named DEF_NME, with comment DEF_CMT exists.
--
defect {DEF, DEF_NME, DEF_CMT}
    PK {DEF}
    AK {DEF_NME}
 
 -- Defect category CAT named CAT_NME exists.
--
dcat {CAT, CAT_NME}
  PK {CAT}
  AK {CAT_NME}
 
 -- Defect DEF is in defect category CAT.
--
defect_category {DEF, CAT}
             PK {DEF, CAT}

FK1 {DEF} REFERENCES defect {DEF}
FK2 {CAT} REFERENCES dcat   {CAT}
 
 --  Part PRT named PRT_NME exists.
--
part {PRT, PRT_NME}
  PK {PRT}
  AK {PRT_NME}
 
 -- It is possible for part PRT to have defect DEF.
--
part_defect {PRT, DEF}
         PK {PRT, DEF}

FK1 {PRT} REFERENCES part   {PRT}
FK2 {DEF} REFERENCES defect {DEF}
 
 -- Equipment EQP named EQP_NME exists.
--
equipment {EQP, EQP_NME}
       PK {EQP}
       AK {EQP_NME}
 
 -- Equipment EQP contains part PRT.
--
equipment_part {EQP, PRT}
            PK {EQP, PRT}


FK1 {EQP} REFERENCES equipment {EQP}
FK2 {PRT} REFERENCES part      {PRT}
 
 -- Operator 0PR named OPR_NME exists.
--
operator {0PR, OPR_NME}
      PK {0PR}
      AK {OPR_NME}
 
 -- Report type RTY named RTP_NME exists.
--
report_type {RTY, RTP_NME}
         PK {RTY}
         AK {RTP_NME}
 
 -- Report category RCT named RCT_NME exists.
--
report_cat {RCT, RCT_NME}
        PK {RCT}
       AK {RCT_NME}
 
 -- Report REP, of report-type RTY, named REP_NME,
-- categorized in report-category RCT,
-- was submitted by operator OPR on date-time DTE,
-- for equipment EQP with comments REP_CMT.

report{REP, RTY, REP_NME, RCT, OPR, DTE, EQP, REP_CMT}
   PK {REP}
   AK {REP_NME}
   SK {REP, EQP}

FK1 {RTY} REFERENCES report_type {RTY}
FK2 {OPR} REFERENCES operator    {0PR}
FK3 {EQP} REFERENCES equipment   {EQP}
FK4 {RCT} REFERENCES report_cat  {RCT}
 
 -- Defect DEF for part PRT of equipment EQP is reported in
-- report-detail number DET_NO of report REP; with 
-- additional comments DET_CMT. 
--
report_detail {REP, DET_NO, EQP, PRT, DEF, DET_CMT}
           PK {REP, DET_NO}

FK1 {REP, EQP} REFERENCES report         {REP, EQP}
FK2 {EQP, PRT} REFERENCES equipment_part {EQP, PRT}
FK3 {PRT, DEF} REFERENCES part_defect    {PRT, DEF}
 

Примечание:

 All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key