#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 диктовали, как должен быть написан код, прошло.
Помимо этого:
- небольшая опечатка здесь: DefectDetail_e_sLookup
- Категория отчета => существует два раза. Я думаю, что верхняя — это просто категория
- дайте вашим столбцам » да » / » нет » значимые имена, например 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