Использование внешнего ключа NULL для указания конфигурации по умолчанию MySQL
Я пытаюсь разработать систему с высокой степенью конфигурации, в которой связанные модели могут указывать конфигурации отношений. У меня возникают проблемы с выбором места установки конфигурации по умолчанию.
companies {
ID
}
accounts {
ID
}
companies_accounts {
ID, Company_ID, Account_ID, Setting1, Setting2, Setting3
}
Это довольно просто, но я не могу понять, где разместить конфигурации по умолчанию. Вот три варианта, которые я рассмотрел:
Задавать
Account_ID = NULL
иметь строки, которые определяют конфигурацию по умолчанию для компании. Это хорошо, потому что он хранит структуру конфигурации в одном месте. Это плохо, потому что уникальный индекс включенAccount_ID
а такжеCompany_ID
, но мы могли бы иметь несколько строк сCompany_ID = XX AND Account_ID IS NULL
, Это означает, что у нас может быть несколько конфигураций по умолчанию, что не имеет смысла.Поместите конфигурации в
companies
стол тоже. Это позволит использовать только одну конфигурацию по умолчанию, но теперь конфигурации находятся в нескольких местах. Тоже ничего хорошегоПоместите конфигурацию в отдельную таблицу
relationship_configs
, дайте каждый ряд вcompanies_accounts
RelationshipConfig_ID
и дать каждый ряд вcompanies
DefaultRelationshipConfig_ID
, Это, кажется, лучший вариант, но он добавляет еще одну таблицу в базу данных, и у нас есть много таких схем конфигурации, которые должны существовать (т.е. почти каждая таблица отношений имеет некоторые параметры конфигурации - и их много - и каждая нужно было бы иметь свою собственную таблицу конфигурации). Это привело бы к множеству объединений в довольно больших наборах данных (что может быть не плохо. Я не совсем уверен)