#sql #polymorphic-associations
#sql #полиморфные ассоциации
Вопрос:
Я хочу создать систему динамических полей. Идея заключается в том, что владелец сможет создавать динамические поля, скажем, для клиентов своей компании. Проблема в том, что структура базы данных, которую я придумал, требует использования полиморфной ассоциации. Моя структура следующая:
-
Таблица полей, состоящая из следующих столбцов:
ID, FieldName, FieldType (Тип поля, вероятно, можно избежать)
-
Таблицы значений полей (Существует несколько таблиц значений, по одной для каждого типа данных динамических полей, например. Таблица для хранения значений, которые являются DATETIMES, таблица, которая хранит значения, которые являются ДЕСЯТИЧНЫМИ ДРОБЯМИ и так далее.). Эти таблицы имеют идентичную структуру, но с другим типом данных для их столбца значений! Они состоят из следующих столбцов:
ID, fieldId, CustomerID, FieldValue
Теперь, чтобы получить значение поля, я должен выполнить множество ЛЕВЫХ соединений между таблицами значений и таблицей полей и сохранить только тот столбец значений, значение которого не является нулевым, поскольку только один столбец значений, если таковой имеется, будет иметь значение! Конечно, это совсем не эффективно, и я пытаюсь этого избежать. Приветствуются любые предложения, даже если они требуют совершенно другой структуры базы данных. Я также использую MySQL вместе с EntityFrameworkCore.
Комментарии:
1. Были бесконечные обсуждения этой ужасающей модели «максимальной гибкости», называемой значением атрибута EAV — Entity. Найдите этот термин здесь, и вы их найдете. Мои 2 цента — избавьте себя от хлопот и не ходите туда. Многие пытались, большинство потерпели неудачу и все еще зализывают свои раны. Реляционные базы данных предназначены для моделирования реальности, а не ее абстрактных представлений. Кстати, в SQL нет полей — есть строки и столбцы. найдите и это тоже…
2. Я уже читал о EAV, но это действительно не помогло. И я считаю, что здесь есть упущенное потребление. Я никогда не говорил, что в SQL есть поля. Значение поля, имя_поля и т.д. — это названия столбцов схемы БД, которые я планирую использовать…