Как очистить кэш кода Visual Studio на компьютере Mac / Linux?

У вас есть по крайней мере эти пять вариантов моделирования иерархии типов, которую вы описываете:

  • Наследование отдельных таблиц : одна таблица для всех типов продуктов, с достаточным количеством столбцов для хранить все атрибуты всех типов. Это означает много столбцов, большинство из которых имеют NULL в любой заданной строке.
  • Наследование классов таблицы : одна таблица для продуктов, ко всем типам продукции. Затем одна таблица для каждого типа продукта, сохраняющая атрибуты, специфичные для этого типа продукта.
  • Наследование бетонных таблиц : нет таблицы для общих атрибутов товаров. Вместо этого одна таблица для каждого типа продукта, сохраняющая как общие атрибуты продукта, так и атрибуты продукта.
  • Сериализованная LOB : одна таблица для продуктов, сохраняющая атрибуты, общие для всех типов продуктов. В одном дополнительном столбце хранится BLOB полуструктурированных данных в формате XML, YAML, JSON или в другом формате. Этот BLOB позволяет сохранять атрибуты, специфичные для каждого типа продукта. Вы можете использовать причудливые шаблоны проектирования, чтобы описать это, например, «Фасад» и «Memento». Но независимо от того, у вас есть blob атрибутов, которые не могут быть легко запрошены в SQL; вы должны вернуть весь blob обратно в приложение и отсортировать его там.
  • Entity-Attribute-Value : одна таблица для продуктов и одна таблица, которая сводит атрибуты к строкам , вместо столбцов. EAV не является корректным проектом в отношении реляционной парадигмы, но многие люди его используют. Это «Шаблон свойств», упомянутый другим ответом. Другие вопросы с тегом eav на StackOverflow для некоторых ошибок.

Я написал об этом больше в презентации, Расширяемое моделирование данных .


Дополнительные мысли о EAV: Хотя многие люди предпочитают EAV, я этого не делаю. Это похоже на самое гибкое решение, и, следовательно, лучшее. Однако имейте в виду поговорку TANSTAAFL . Вот некоторые из недостатков EAV:

  • Невозможно сделать столбец обязательным (эквивалентным NOT NULL).
  • Невозможно использовать типы данных SQL для проверки записи.
  • Невозможно обеспечить постоянство написания имен атрибутов.
  • Невозможно поместить внешний ключ в значения любого атрибута, например для таблицы поиска.
  • Получение результатов в обычном табличном макете является сложным и дорогостоящим, потому что для получения атрибутов из нескольких строк вам нужно сделать JOIN для каждого атрибута.

Степень гибкости EAV дает вам жертвы в других областях, возможно, делая ваш код сложным (или хуже), чем это было бы для решения исходной проблемы более обычным способом.

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

d использовать EAV только в том случае, если каждой строке должно быть разрешено потенциально иметь отдельный набор атрибутов. Когда у вас есть конечный набор типов продуктов, EAV является излишним. Класс Наследование наследования был бы моим первым выбором.

15
задан Ariella 30 August 2016 в 18:14
поделиться