Отказ от применения ссылочной целостности - рискованная вещь, если вы не абсолютно и не уверены, что НИКТО, а ВАШЕ приложение не будет когда-либо заполнять данные в этой таблице (и что ваше приложение, конечно, протестировано, чтобы убедиться, что оно сохраняетцелостность)
В практическом сценарии я нашел этот подход рискованным, потому что, как только система будет запущена в производство, всегда есть вероятность, что появятся другие приложения, особенно инструменты переноса данных / патчи /некоторые прямые манипуляции с данными в некоторых неотложных сценариях, которые в конечном итоге манипулируют данными, и в отсутствие ограничения у них не будет возможности идентифицировать взаимосвязь и, возможно, в конечном итоге будет ввод неправильных данных.
Кроме того, я не знаю, нужен ли вам этот ввод, но, глядя на вашу схему, я, вероятно, рассмотрю небольшое изменение
[Stores]
StoreID (PK)
StoreName
[Items]
ItemID (PK)
ItemName
Description
StoreID (FK)
[Sizes]
SizeID (PK)
SizeName
[ItemSizes]
ItemID (PK)
SizeID (PK)
Price
[Users]
UserID (PK)
UserName
Примечание: я разделил вашу таблицу [ItemSizes]
на [Sizes]
и [ItemSizes]
.
Сюда, уВы можете добавить в избранное элемент или размер (как вы сейчас делаете) или даже элемент определенного размера.
[FavouriteSizes]
UserID (PK) (FK)
SizeID (PK) (FK)
IsActive
[FavouriteItemSizes]
UserID (PK) (FK)
ItemID (PK) (FK)
SizeID (PK) (FK)
IsActive
[ItemRatings]
UserID (PK) (FK)
ItemID (PK) (FK)
Rating
IsActive
Подводя итог, добавьте поля IsActive
, даже в избранное и рейтингтаблицы - в дополнение к вашим основным таблицам - с помощью WHERE IsActive
проверять и делать избранное / оценки мягкими - удаляются при удалении элемента / размера / размера элемента, а затем иметь дополнительную логику для отображения ваших избранных / оценок, чтобы указать не- наличие ранее добавленных оценок / избранного для пользователя кажется мне лучшим вариантом.
Я не совсем уверен в том, как проверка IsActive работает с EF - не использовал EF - но в целом, я бы сказал,убедиться, что проверка всегда присутствует во всех запросах, легко, если убедиться, что конкретный пункт проверен - как часть процесса проверки.Обычно это становится второй натурой в команде, и дополнительные усилия по обеспечению того, чтобы проверка была незначительной.