Я хотел бы предложить вам две таблицы:
Bookstores:
id
name
someMoreColumns
книги:
id
bookStore_id
title
isbn
date
publisher
format
size
someMoreColumns
Легко видеть отношения здесь: а bookStore
имеет много books
.
Обратите внимание, что я помещаю все столбцы, которые у вас есть во всех ваших таблицах BookStore
, всего за одну таблицу, даже если какая-либо строка из какой-либо таблицы не имеет значения для какого-либо столбца.
Почему я предпочитаю этот путь:
1) Для всех данных из таблиц BookStore
, только несколько колонн будет никогда имеют значение по таблице books
(как, например, size
и format
, если у вас нет версия электронной книги). Другие столбцы могут быть заполнены когда-нибудь (вы можете установить date
в свои электронные книги, но у вас нет этого столбца в таблице BookStore_Bar
, который, как представляется, относится к электронным книгам). Таким образом, вы можете получить гораздо более подробную информацию из всех своих книг, если когда-нибудь захотите ее обновить.
2) Если у вас есть куча столов BookStore
, скажем 12, вы не сможете легко обрабатывать свои данные. То, что я говорю, если вы хотите запустить какой-то запрос на все ваши книги (что означает для всех таблиц), вы будете иметь, по крайней мере тремя способами:
Первое: запустить вручную запрос для каждого из 12 таблиц и поэтому объединить данные;
Во-вторых: написать запрос с 12 соединениями или установить 12 таблиц в вашем предложении FROM
, чтобы запросить все ваши данные;
Third: быть зависимым от какого-либо скрипта, хранимой процедуры или программного обеспечения, чтобы сделать для вас первый или второй способ, который я только что сказал;
Мне нравится иметь возможность работать с моими данными как можно проще и без какой-либо зависимости от какого-либо другого скрипта или программного обеспечения, если только мне это не нужно.
3) Что касается MySQL (потому что я знаю гораздо больше MySQL), вы можете использовать partitions
на своей таблице books
. Это высокий уровень управления данными, в котором вы можете распространять данные из своей таблицы на несколько файлов на вашем диске, а не только на один, как обычно выделяется таблица. Это очень полезно при обработке большого количества данных в одной таблице и ускоряет запросы на основе вашего плана распространения данных. Давайте посмотрим на пример:
Допустим, у вас уже есть 12 разных книжных магазинов, но под моей моделью базы данных. Для каждой строки в вашей таблице books
у вас будет связь с одним из 12 книжных магазинов. Если вы разделите свои данные на bookStore_id
, это будет почти то же самое, что и у вас было 12 таблиц, потому что вы можете создать раздел для каждого bookStore_id
, и поэтому каждый раздел будет обрабатывать только связанные данные (данные, соответствующие bookStore_id
).
Допустим, вы хотите запросить таблицу books
на bookStore_id
в (1, 4, 9). Если ваш запрос действительно нужен только для этих трех разделов, чтобы дать вам желаемый результат, другие не будут запрашиваться, и они будут такими же быстрыми, как вы запрашивали каждую отдельную таблицу.
Вы можете удалить раздел, а другой не пострадать. Вы можете добавлять новые разделы для обработки новых книжных магазинов. Вы можете разделить раздел. Вы можете объединить два раздела. В двух словах вы можете превратить свою единственную таблицу books
в удобную для пользователя таблицу с несколькими хранилищами.
Побочные эффекты:
1) Я не знаю, все таблицы разделов, так что это хорошо, чтобы обратиться к документации, чтобы узнать все важные моменты, чтобы создать и управлять им.
2) Соблюдайте данные с регулярными резервными копиями (дампами), поскольку у вас, вероятно, может быть очень заполненная таблица books
.
Надеюсь, это поможет!
Являются ли таблицы для книг в каждом книжном магазине в другой базе данных или все они находятся в одной базе данных? –