Зачем вам нужна эта структура таблицы.Моя основная проблема заключается в том, что вам придется приводить данные в значение свойства каждый раз, когда вы захотите их использовать.На мой взгляд, это плохо - хранение чисел, так как текст сумасшедший, учитывая, что все равно в двоичном виде.Например, как вы собираетесь иметь обязательные поля?Или поля, которые должны иметь ограничения на основе других полей?Например, дата начала и окончания?
Почему бы просто не иметь свойства в виде полей, а не отношения многие ко многим?
иметь 1 плоскую таблицу.Когда ваши бизнес-правила начинают показывать, что свойства должны быть сгруппированы, вы можете рассмотреть возможность их перемещения в другие таблицы и иметь несколько отношений 1: 0-1 с таблицей пользователей.Но это не нормализация, и это немного ухудшит производительность из-за дополнительного объединения (однако самодокументируемая природа имен таблиц очень поможет любым разработчикам)
Один из способов, которым я регулярно вижу, как производительность базы данных полностью кастрируется, - этоимеющий общий
Id, тип свойства, имя свойства, таблицу значений свойства.
Это действительно ленивый, но исключительно гибкий, но полностью снижающий производительность.На самом деле на новой работе, где производительность плохая, я действительно спрашиваю, есть ли у них таблица с такой структурой - она неизменно становится центральной точкой базы данных и работает медленно.Весь смысл проектирования реляционных баз данных заключается в том, что отношения определяются заранее.Это просто методика, которая направлена на ускорение разработки с огромными затратами на скорость приложения.Кроме того, он сильно полагается на бизнес-логику на уровне приложений, что вовсе не является защитным.В конце концов вы обнаружите, что хотите использовать свойства в ключевой взаимосвязи, которая приводит ко всем видам приведения в соединение, что еще больше снижает производительность.
Если данные имеют отношение 1: 1 с сущностью, то это должно бытьполе на той же таблице.Если ваша таблица достигает более 30 полей в ширину, подумайте о том, чтобы переместить их в другую таблицу , но не называйте это нормализацией, поскольку она не .Это метод, который помогает разработчикам группировать поля вместе за счет производительности, пытаясь помочь в понимании.
Я не знаю, есть ли у mysql эквивалент, но в sqlserver 2008 есть разреженные столбцы - пустые значения не занимают места, Типы данных разреженных столбцов
Я не говорю, что подход EAV всегда неверен, но я думаю, что использование реляционной базы данных для этого подхода, вероятно, не лучший выбор.