хранение нескольких форматов в таблице - PullRequest
1 голос
/ 11 октября 2010

Итак, вот основная проблема: я хотел бы иметь возможность хранить различные поля в базе данных.Это могут быть короткие текстовые поля (возможно, максимум 150 символов, возможно, более 50, в общем) и длинные текстовые поля (то, что может хранить целую страницу, полную текста).В идеале больше типов может быть добавлено позже.

Эти поля группируются по общим field_group id s, и их тип не должен иметь ничего общего с категоризацией.

Так, как лучше всего представить это в MySQL?Одна таблица с short_text и long_text столбцами разных типов, одна из которых должна быть NULL?Или есть более элегантное решение?

(я бы хотел, чтобы в первую очередь это объяснялось легкостью выбора всех полей с заданным field_group_id.)

Уточнение

Япо сути, пытаясь разрешить пользователям создавать свои собственные таблицы, но фактически не создавая таблицы.

Таким образом, у вас будет группа полей «Книга», в которой будут поля «Имя» (краткий текст), «Сводка».'(длинный текст).Тогда вы сможете создавать записи в этой книге.Я понимаю, что в этом и заключается весь смысл MySQL, но мне нужно их МНОГО, и я не хочу, чтобы пользователи создавали целые таблицы в моей базе данных.

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

То, что вы ищете, называется EAV.С помощью модели EAV вы можете создать любую чертову базу данных в мире, используя только вставки.Но это действительно ужасно по многим причинам, но ваша звучит так безумно, это может сработать.

Создание таблицы сущностей

Здесь вы бы перечислили

  • Автомобиль
  • Человек
  • Завод

Постройте таблицу атрибутов.

Здесь вы перечислите PK из Entity и список атрибутов.

Я буду использовать слово вместо числа PK.

  • Car |Цилиндры двигателя
  • Автомобиль |Двери
  • Автомобиль |Make
  • Person |Имя
  • Персона |Фамилия

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

  • Car |Цилиндры двигателя |4
  • Автомобиль |Двери4
  • Автомобиль |Сделать |Honda
  • Персона |Имя |Стефани
  • Персона |Фамилия |Страница

Если вы хотите получить хитрый вместо одного столбца для значения, вы можете иметь 4 столбца

  • число
  • varchar
  • дата
  • сгусток

, затем в таблицу атрибутов можно добавить столбец, в котором указано, в какой столбец следует помещать данные.

Если вы планируетеэта база данных "Multitenent", вам нужно добавить таблицу OWNER в качестве родителя таблицы сущностей, чтобы вы и я могли иметь сущность Car.

Но этот SUCKS для запроса, SUCKS для индекса,Отстой использовать для чего-либо еще, кроме игрушечного приложения.

0 голосов
/ 11 октября 2010

Я не знаю точно, что вы подразумеваете под "группой полей", но если информация (краткий текст, длинный текст) относится к определенной записи, вы можете создать одну таблицу и включить все эти столбцы.

Скажем, у вас есть несколько книг с заголовком и резюме:

table: `books`
- id, int(11) // unique for each book
- title, varchar(255)
- writer, varchar(50)
- summary, text
- etc

Поля, которые не обязательно должны быть установлены, по умолчанию могут быть установлены в NULL.

Чтобы получить информацию, просто выберите все поля:

SELECT * FROM books WHERE id = 1

Или некоторые из полей:

SELECT title, writer FROM books ORDER BY title ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...