Дизайн базы данных в GAE / J: реляционное моделирование и значение-атрибут-сущность

Представьте, что вы планируете создать социальную сеть , работающую на GAE / Java , где каждый пользователь имеет набор свойств (например, возраст, текущий город, интересов).

Альтернатива 1 : классический подход - user_id и каждое свойство в виде «строки»

entity  property_1 property_2 property_3
------  ---------- ---------- -----------------
bob     missing    NY         [football, books]
tom     34         missing    [books, horses]

Альтернатива 2 : entity-atributte-value (EAV)

entity   attribute   value
------   ---------   -----
bob      town        NY
bob      interests   [football, books]
tom      age         34
tom      interests   [books, horses]

Какие плюсы / минусы вы думаете у каждого варианта есть? Меня больше всего беспокоит:

  1. Каково влияние на поиск по нескольким критериям (т. Е. "дайте мне пользователей в возрасте до 45 лет, которые живут в Нью-Йорке и любят книги" )
  2. Какие последствия для GAE / J это может иметь? (например, индексы, размер хранилища данных ...)
  3. Как моделировать атрибуты с несколькими значениями (например, «интересы»), если вы хотите получить «пользователей, которые любят книги» ?

Я думаю второй вариант более гибкий и, возможно, его проще реализовать, но я хотел бы знать, что думают другие опытные разработчики.

Спасибо.

5
задан Guido 21 December 2010 в 10:09
поделиться