2009-10-19 3 views
0

Мне было интересно, можно ли указать порядок, в котором определения таблиц и хранилища данных загружаются с использованием CLI. Моя проблема в том, что у меня есть две таблицы, каждая из которых имеет ограничение внешнего ключа, указывающее на другое, поэтому одно из ограничений необходимо добавить после добавления записи. Или, может быть, есть лучший способ сделать это ... Я не специалист по db, и сегодня у меня голова нечеткая.Doctrine PHP Question

Схема:

CREATE TABLE clients (
    id INT AUTO_INCREMENT, 
    name VARCHAR(255), address VARCHAR(255), 
    primary_contact_user_id INT # References a user record in the users table 
    ... 
); 

CREATE TABLE users (
    id INT AUTO_INCREMENT, 
    username VARCHAR(255), 
    client_id INT # References a client record in the clients table 
    ... 
); 

ALTER TABLE clients 
    ADD CONSTRAINT clients_primary_contact_user_id_users_id 
    FOREIGN KEY (primary_contact_user_id) REFERENCES users(id); 

ALTER TABLE users 
    ADD CONSTRAINT users_client_id_clients_id 
    FOREIGN KEY (client_id) REFERENCES clients(id); 

ответ

1

Я тоже не эксперт DB, но я провожу много времени, работая с ними. Я считаю, что круговая ссылка на самом деле неверна.

Независимо от того, санкционирует ли это теория БД или нет, вы можете получить одно поле, хотя соединение с другой таблицей, так что это ненужная циркулярная ссылка. Я предлагаю вам устранить одно и изменить любые запросы, чтобы отразить это изменение.

Основываясь на догадку, я предлагаю вам устранить primary_contact_user_id, как это звучит почти как возможный многие-ко-многим, где один элемент избран «первичный» ...

Если вы чувствуйте, что этот дизайн необходим, можете ли вы объяснить, почему?

+0

Спасибо за предложение, это на самом деле то, о чем я только думал, глядя на мой вопрос. И нет, не важно, чтобы дизайн был таким, какой он есть. –

0

введите инструкции INSERT между операторами CREATE TABLE и ALTER TABLE.