Эффективно хранить несколько ключей в одной категории - PullRequest
0 голосов
/ 03 апреля 2012

Я использую базу данных MySQL и JSP для проекта.В моем проекте есть такие категории, как Философия, Техника, Искусство, Спорт и т. Д. Эти категории имеют несколько значений, например, спорт, хоккей, крикет, футбол и т. Д. Если я использую базу данных для хранения этих значений, произойдет избыточность.
Напримерспорт-крикет, спорт-хоккей и т. д.

Итак, мой вопрос: есть ли какой-нибудь эффективный способ сохранить эти значения, чтобы, когда любой человек входит в крикет, он сравнивался с крикетом в спортивной категории?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2012

Ваша типичная СУБД не понимает понятия «указатель», поэтому, чтобы «связать» две таблицы, некоторые значения из одной таблицы должны быть физически скопированы в другую.Кроме того, всякий раз, когда вы создаете индекс, копия данных из индексированных столбцов будет храниться в этом индексе.

Существуют очень веские причины, по которым в базах данных нет указателей.В частности, СУБД может перемещать данные внутри физического хранилища, не беспокоясь о зависании указателей.Одно это вполне оправдывает несколько повышенные требования к хранилищу (по сравнению с гипотетической СУБД с использованием указателей вместо копий), поэтому вам просто придется с этим смириться.


При этом делатьнормализуйте ваши данные.Ответ Майкла Фредриксона уже охватывал отношение M: N, но в случае, если это фактически 1: N (т.е. значение не может быть в более чем одной категории), вам нужно что-то вроде этого:

enter image description here

0 голосов
/ 04 апреля 2012

Похоже, у вас классические отношения многие ко многим .

A category может иметь много value записей, а value может быть связано со многими category записями.

Чтобы смоделировать это, вы должны создать три таблицы: category, value и таблицу соединений, category_value.

Категория

  • ID
  • Имя
  • Etc ...

Значение

  • ID
  • Имя
  • Etc ...

Category_Value

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