Нормализация базы данных и sql путаница - PullRequest
0 голосов
/ 05 июля 2011

Не уверен, что это лучшая структура для моей базы данных, но это то, что у меня есть в данный момент (открыто для предложений по изменениям). Я в основном хочу создать страницы, которые имеют определенный пользователем набор полей для каждой страницы. Итак, у меня есть четыре таблицы: pages, page_fields, page_data и data_fields.

страниц:

id   name
 1   home

page_fields:

page_id field_id
   1       1
   1       2
   1       3

page_data:

 page_id  field_id  content
    1        1      'This is the Title'
    1        3      'Some description here'

data_fields:

id  field_name   field_type
1     title         text
2    subtitle       text
3   description    textarea

Прежде всего, это хорошая структура базы данных? Во-вторых, как я могу получить обязательные поля, как определено таблицей page_field, данными (если они есть) для этого поля, а также filed_name и filed_type, если мы знаем идентификатор страницы?

Полагаю, здесь будет несколько объединений, но я просто не могу их обработать.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 05 июля 2011
  1. Предполагая, что одно поле на одной странице может иметь одно значение, вы можете легко исключить таблицу page_fields. Список полей, назначенных странице, будет сохранен в page_data, а если содержимого еще нет, значение NULL будет в столбце content.

  2. Что-то вроде SELECT * FROM page_fields INNER JOIN page_data ON (page_fields.page_id = page_data.page_id) INNER JOIN data_fields ON (page_data.field_id = data_fields.id);

  3. Дополнительно читайте о модели «Значение атрибута сущности», возможно, она порождает некоторые новые идеи и в целом полезна для понимания вещей: http://en.wikipedia.org/wiki/Entity-attribute-value_model

...