Объект и дизайн мета-схемы объекта - PullRequest
2 голосов
/ 19 февраля 2011

Я работаю над проектом, который сохранит много типов объектов в базу данных.К ним относятся: статьи, опросы, писатели и т. Д. Некоторые из них мне неизвестны во время разработки, поэтому я пытаюсь создать общую схему таблиц, которая позволит мне сохранять элементы любого типа в этой базе данных.

Мой дизайн

Объект таблицы

objectID int
title varchar
body text
type int #will represent the ID of the type of object am inserting

Учитывая эти обстоятельства или требования, возможно, потребуются дополнительные данные, я решил, что это пойдет к тому, что я называю"метаданные объекта" следующие:

Таблица Object_MetaData

metaID int
metaKey varchar
metaIntKey int #representing an integer value of metaKey which is calculated using some algorithm to speed up queries
metaValue varchar(1000)

Я делаю всю работу в PHP и MySQL, кстати.

ПараЧто мне пришло в голову, когда я делал этот проект относительно производительности базы данных в долгосрочной перспективе:

1) Сохраняет ли int, boolean, small text, big text в metaValue эффективность?

2) в долгосрочной перспективе таблица метаданных будет расти довольно быстро.Это кошмар обслуживания?Как MySQL собирается справиться с этим?

3) В php при извлечении объектов мне придется зацикливать каждый объект для извлечения его метаданных или загружать все метаданные один раз, используя ленивую загрузку, или загружать любой отдельный метаключ один раз, когда егозапрашивается с помощью метода __get magic.Таким образом, при получении списка, скажем, 50 объектов, по крайней мере 50 операторов выбора будут выполняться при использовании любого из предложенных мной методов.Есть ли лучший, более эффективный способ сделать это?

Любые мысли или комментарии по этому проекту приветствуются.

1 Ответ

2 голосов
/ 19 февраля 2011

Я бы предложил изменить архитектуру вашего решения.Этот шаблон называется «Entity-Attribute-Value» (EAV) и обычно рассматривается как анти-шаблон.Вместо этого определите атрибуты метаданных в столбцах (той же таблицы или другого, если необходимо).Также используйте правильные типы данных.

Я бы предложил прочитать книгу Билла Карвина SQL AntiPatterns .В нем есть отличные идеи, которые помогут вам в этом.Вы можете почувствовать это из этой презентации ...

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