Не думаю, что на вопрос был дан полный ответ.
Если они редактируют поле «Имя» в таблице свойств ... Измените ли вы дизайн таблицы теста, добавив столбец имен свойств и отбросив таблицу сопоставления TestProperty?
Определенно нет. Это добавило бы массовое дублирование без всякой цели.
Если ваше требование состоит в том, чтобы поддерживать целостность значений данных (в свойстве) во время теста, правильный метод (база данных) - реализовать таблицу истории. Это должна быть точная копия исходной таблицы плюс один элемент: к PK добавляется столбец TIMESTAMP или DATETIME. <pre>PropertyHistory
PropertyId AUTONUMBER,
Name CHAR
CONSTRAINT PRIMARY KEY CLUSTERED UC_PK (PropertyId)<br>
PropertyHistory
PropertyId INT,
AuditedDtm DATETIME,
Name CHAR
CONSTRAINT PRIMARY KEY CLUSTERED UC_PK (PropertyId, AuditedDtm)
Чтобы это было значимым и полезным, тестовой таблице также нужна временная метка, чтобы определить, на какую версию ProperyHistory ссылаться: <pre>TestProperty
TestId
PropertyId
TestDtm DATETIME
Столбец имен свойств должен быть чем-то вроде разделенного списка строк.
Это нарушило бы основные правила проектирования, а также правила нормализации базы данных и помешало бы вам выполнять обычные реляционные операции над ним. Никогда не храните более одного значения данных в одном столбце.
... или поместите строку в таблицу свойств
Удаление снова что-то другое. Если это «база данных», то она имеет целостность. Поэтому вы не можете удалить родительскую строку, если у нее есть дочерние строки в какой-то другой таблице (и вы можете удалить ее, если у нет есть дочерние элементы). Обычно это выполняется как «мягкое удаление», добавляется индикатор, такой как IsObsolete
. На него ссылаются различные SELECT, чтобы исключить использование строки (для добавления новых дочерних элементов), но он остается доступным в качестве родительского для существующих дочерних элементов.