Я пытаюсь создать базу данных для управления запасами, используя большое количество таблиц и принудительных отношений, и я только что натолкнулся на ограничение в 32 отношения (индекса) для таблицы Access (используя Access 2007).
Просто чтобы уточнить: проблема не в том, что таблица Employees имеет 32 явных индекса. Скорее проблема заключается в ограничении количества ссылок на таблицу Employee в ограничениях FOREIGN KEY
. Например:
CREATE TABLE Employees (employee_number INTEGER NOT NULL UNIQUE)
;
CREATE TABLE Table01 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table02 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table03 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
...
CREATE TABLE Table30 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table31 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table32 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
В последней строке выше выдается исключение: "Не удалось создать индекс; определено слишком много индексов.
Какие варианты у меня есть, чтобы обойти это ограничение?
Я слышал, что создание дублирующейся таблицы с соотношением 1: 1 - это один из методов. Я новичок в разработке баз данных, поэтому, пожалуйста, поправьте меня, если я ошибаюсь; но с учетом таблицы Employees с 31 индексом я бы создал таблицу Employees2 (с одним полем?) с отношением 1: 1 к Employees и связями с этой новой таблицей из любых оставшихся связей, в которых EmployeeID является внешним ключом. Каков наилучший способ обеспечить заполнение второй таблицы рядом с первой?
Есть ли другой подход?
Из-за нехватки доступной информации может показаться, что это может быть редкой проблемой с правильно спроектированной базой данных, или решение известно. Прости новичка!
Обновление : Непосредственный консенсус заключается в том, что мой дизайн провален или слишком амбициозен. Это вполне может иметь место. Тем не менее, я бы предпочел провести общее обсуждение проекта в рамках отдельного вопроса, так что, ради аргумента, может кто-то ответить на этот вопрос? Если ответ просто «Никогда не делай этого», мне придется принять его.