В настоящее время я работаю над реляционной базой данных SQL Server, к которой будет обращаться через Entity Framework. У меня есть пара вопросов, на которые я, похоже, не нахожу правильных ответов.Денормализация и добавление нескольких идентификаторов в одну строку
Пожалуйста, смотрите мою диаграмму модели базы данных:
1. Я не совсем уверен, что если ProblemType
реализации является правильным путем. Как уже было установлено, оба столбца допускают нулевые значения в ProblemType
, поскольку он либо будет содержать ProblemTypeRoadID
, либо ProblemTypeVandalismID
. Поэтому вопрос в том, действительно ли можно де-нормализовать модель, удалив таблицу ProblemType
и связав ее как ProblemTypeRoad
, так и ProblemTypeVandalism
в таблице ProblemDesc
?
2. Глядя на Problem
таблице вы найдете столбец с именем HistoryIDs
. Этот столбец должен содержать строку с разделителями-запятыми со всеми HistoryIDs
, связанными с Problem
. A HistoryID
по существу равен ProblemDescID
(так как ProblemDesc
получает свой столбец IsHistory
, установленный в true, когда он обновляется), поскольку ProblemDesc
копируется при каждом изменении. Мой вопрос: что такое лучший способ добавить несколько ProblemDescIDs
в колонку HistoryIDs
? Если бы это было что-то вроде «1,5,7», было бы легко найти все истории для данного ProblemDesc
.
3. Любых других предложений по диаграмме также очень приветствуется :)
Спасибо заранее!
EDIT: Пожалуйста, обратите внимание пересмотренную диаграмму:
Теперь, когда вы дали мне некоторые большие предложения по улучшению, я попытался реализовать большинство ваших предложений. ProblemType
был удален и добавлен ProblemHistory
. Были также внесены изменения в то, как WorkerComment
и Media
относятся к их родительским таблицам. Будет ли эта реализация работать?
Спасибо!
# 2: ** не делайте этого! ** это нарушает даже первую нормальную форму ** дизайна базы данных: ячейка (строка/столбец) должна содержать ** не более одного значения * * (и только одно значение - или ничего) - но ** никогда ** несколько значений! Забивание нескольких идентификаторов в строку с разделителями-запятыми собирается сделать выбор этих значений позже грязным адом! Не делай этого - серьезно - просто нет. .... –