Пожалуйста, предложите лучший способ создать мою базу данных - PullRequest
0 голосов
/ 09 января 2011

У меня есть таблица с именем Pages и таблица с именем Categories. Каждая запись таблицы Pages связана с таблицей Categories. Таблица Categories содержит 5 записей: Car, Websites, Technology, Mobile Phones и Interest.

Таким образом, каждый раз, когда я помещаю запись в таблицу Pages, мне нужно сопоставить ее с таблицей Categories, чтобы они располагались правильно.

Вот мой стол:

Страницы

id [PK]
name
url

Категория

id [PK]
Categoryname

Pages2Categories

Pages.id
Categories.id

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

Ответы [ 3 ]

2 голосов
/ 09 января 2011

Если каждая страница должна иметь ровно 1 категорию, поместите идентификатор категории в таблицу Pages.

Если каждая страница может иметь одну категорию, а у большинства страниц ее нет, укажите (page_id, category_id)отдельная таблица с первичным ключом (page_id)

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

Не беспокойтесь о месте или производительности на этом этапе.

1 голос
/ 09 января 2011

Поскольку «категория» является атрибутом «страницы», лучше сохранить этот атрибут в таблице «страницы». Чтобы сэкономить место, вы можете использовать целочисленный / числовой тип данных для столбца «категория». например, 1 = автомобиль, 2 = веб-сайты, 3 = технология и т. д.

0 голосов
/ 19 января 2011

Одно предложение: имейте 2 таблицы - «страницы» и «категория».Столбцы на страницах:

Имя [varchar] URL [varchar] Категория [tinyint]

Для категории, как вы спроектировали:

catID [1 | 2 | 4 |8 | 16] (5 возможных значений для 5 категорий) catName [varchar]

Я предполагаю, что у вас есть небольшое количество категорий (<8), если это число увеличивается до 31, вместо этого используйте целое число (используя 4вместо 1 байта на строку).Теперь Категория в таблице страниц не обязательно должна быть FK для другой таблицы.Вы можете сделать логическое ИЛИ для вставки / обновления и И для выбора в своем коде jdbc, если URL принадлежит более чем одной категории.Возможно, это не лучший дизайн БД, но это должно минимизировать занимаемое вами пространство БД на случай, если вам придется экономить миллионы страниц.Из вашей постановки проблемы я не понимаю, зачем вам ПК в таблице ... исключите его, чтобы сохранить еще несколько байтов в каждой строке.С уважением, - MS </p>

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