Проектирование библиотечной базы данных - PullRequest
3 голосов
/ 15 января 2009

У меня есть библиотека, и я хочу перенести ее из старой системы в новую оптимизированную.

Старая библиотека была построена с использованием MS Access (файлы mdb), где каждая книга представляет собой отдельный файл. Каждая книга состоит из двух таблиц, одна для заголовков глав и вторая для содержания. Существует также один файл MDB, который содержит названия всех книг, номера страниц для каждой книги, имена авторов и другую общую информацию.

Новое ядро ​​системной базы данных - MySQL, поэтому у меня есть три (возможно) возможности для хранения книг: 1- Храните все названия глав книг в одной таблице, а все содержимое книг - в другой огромной таблице. 2- Храните все названия глав книг в одной таблице, а содержимое каждой книги - в таблице для этой книги. (поэтому, если у меня будет 5 книг, я получу 1 таблицу для названий глав и 5 для содержания). 3. Сохраните их как дизайн старой системы, каждая книга имеет две таблицы: одну для заголовков глав и вторую для содержания.

Я не предпочитаю использовать несколько баз данных, одна база данных может отлично работать, как блоги, размещенные на wordpress.com (да, у них огромная база данных и, конечно, они используют другие методы, но я говорю о БД архитектура системы).

В этой библиотеке более 500 книг, и их число увеличивается.

Что ты думаешь?

Ответы [ 2 ]

5 голосов
/ 15 января 2009

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

CREATE TABLE books (
  book_id     SERIAL PRIMARY KEY,
  title       VARCHAR(100) NOT NULL,
  published   DATE NOT NULL,
  isbn        VARCHAR(16) NOT NULL
  -- etc.
);

CREATE TABLE chapters (
  book_id     BIGINT UNSIGNED NOT NULL,
  chapter_id  SERIAL,
  chapter_num VARCHAR(10) NOT NULL,  -- varchar to allow chapter "VII."
  title       VARCHAR(100) NOT NULL,
  content     MEDIUMTEXT,
  PRIMARY KEY (book_id, chapter_id),
  FOREIGN KEY (book_id) REFERENCES books(book_id)
);

Несколько тысяч строк в таблице глав тривиально для такой базы данных, как MySQL.

2 голосов
/ 15 января 2009

Вот моя рекомендация:

Таблица книг с первичным ключом, названием, ISBN, издателем и т. Д. Таблица авторов с первичным ключом, именем и внешним ключом для книг. Таблица содержимого с первичным ключом, номером главы, заголовком главы, путем к содержимому и внешним ключом для книг.

Я бы не стал хранить содержимое главы как BLOB или CLOB в базе данных. Вы не можете искать в них. Лучше сохранить их в файловой системе и просто сохранить относительный или абсолютный путь к файлу в базе данных.

Вы можете использовать Lucene для индексации содержимого, чтобы разрешить Google-подобный поиск содержимого. Это было бы улучшением по сравнению с вашей нынешней системой.

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