Модель имя-значение-пара Для данных только для конфигурации - PullRequest
0 голосов
/ 26 октября 2018

Я прочитал, что модель имя-значение-пара в дизайне базы данных является анти-паттерном.По сути у вас есть таблица с двумя столбцами.Один столбец называется «имя», а другой столбец называется «значение».Допустим, вы управляете конфигурацией AWS для разных регионов.Структура базы данных будет выглядеть следующим образом:

name                                value
aws.new_york.access_key             jio4j54h
aws.new_york.site.user              john
aws.new_york.site.pass              eoiri4iiuh
aws.los_angeles.access_key          tret55464
aws.los_angeles.site.user           bob
aws.los_angeles.site.pass           rtry45yrt
aws.new_york.access_key             fgfhgf4fdg
aws.new_york.site.user              edward
aws.new_york.site.pass              45gfhgfhgf

Единственное использование - получение конфигурации:

MyApp.config.get('aws.new_york.access_key')

Другое решение - использовать объединения.Это устранит дублирование и позволит обеспечить ссылочную целостность.Но это становится громоздким:

table_aws has_many table_states, который has_many table_credentials, который имеет столбцы access_key, user, pass.Это позволяет удалить дублирование, но представьте себе возможность увеличения числа вложенных объединений.

Учитывая мой единственный вариант использования, модель модели имя-значение-пара по-прежнему является антипаттерном или она подойдет?

1 Ответ

0 голосов
/ 27 октября 2018

Антишаблон, о котором вы думаете, это, вероятно, Entity-Attribute-Value.Вы описываете простую "хэш-таблицу".Если в этой таблице только сто строк или даже тысяча, проблем нет.

Но ... Вы действительно описываете EAV, за исключением того, что вы сделали его более запутанным.

    aws.new_york.access_key 

на самом деле aws.new_york в качестве «Entity» и «access_key» в качестве «Атрибута».

Обычно таблицы EAV должны состоять из 3 столбцов, с PRIMARY KEY(entity, attribute) в этом порядке.

Если ваша цель - просто хранилище для «конфигурации», то вы вряд ли будете выполнять запросы, которые попадают туда, где разваливается EAV.

Итак ... Посмотрим, что вы будете делать снабор данных до вынесения решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...