Здесь у нас есть три стратегии:
Полно-мета-дизайн, значения атрибутов, допускающих значения NULL для стран, будут занесены в таблицу сбора значений.Например:
страна (country_id, ненулевой attr-1, ненулевой attr-2, ненулевой attr -....) meta_attr (attr_id, attr_desc) (может быть более сложнойесли вам нужен I18N) attr_value (country_id, attr_id, attr_value)
Частично мета-дизайн, используя подкласс таблицы для ссылки на основную таблицу страны.Такой метод можно использовать, если вы можете классифицировать определенный экземпляр данных в коллекцию ненулевых атрибутов.Например:
страна (country_id, ненулевой attr-1, ненулевой attr-2, ненулевой attr -....) specific_type_country (country_id, ненулевой attr-1, non-null-attr-2, non-null-attr -...)
Все атрибуты в основной таблице стран, этот метод является жизнеспособным, только если вы ненужно добавить новый атрибут в страну из системы.Например:
страна (country_id, ненулевое attr-1, ненулевое attr-2, ненулевое attr -...., nullable-attr-1, nullable-2,nullable-attr -...)
Когда я проектировал по такому сценарию, я обычно учитывал производительность запросов, выполняющихся на таких данных.
Если запросысписок стран для всех возможных атрибутов, лучше использовать № 3.
Если запросы относятся к определенным классам стран, скажем, список стран имеет ближайший океан (что этот атрибут не может бытьноль).№ 2 лучше.
Если для запросов требуется подробная информация о стране за один раз, № 1 лучше.
Конечно, вы можете смешать любую из трех вышеуказанных стратегий, чтобыразработайте подходящее решение для ваших возможных запросов.
Предположим, что для самых разных запросов потребуется «самая известная еда» (nullable), поместите этот атрибут в основную таблицу страны.
Предположим, что "ближайший океан" необходим в нескольких запросах, поместите этот атрибут в подкласс таблицы стран.
Предположим, что "название самой высокой горы", "Средняя температура самой высокой горы"необходим для запросов, которые получают только одну строку (скажем, по первичному ключу), поместите этот атрибут в мета-таблицу.