2013-04-21 2 views
1

У меня есть эти таблицыИспользование нескольких внешних ключей в таблице

Client

id(PK), name, logo 

Школа

id(PK), name, logo, client_id (FK) 

Класс

id(PK), name, school_id (FK) 

Тема

id(PK), name, class_id (FK) 

подход 1.

У меня есть предмет идентификатор, мне нужно получить class_id, school_id и client_id субъекта. Я могу написать запрос с JOIN для извлечения идентификаторов от клиента, школы, столы класса

Подход 2

У меня есть дизайн стола как этот

Client

id(PK), name, logo 

Школа

id(PK), name, logo, client_id (FK) 

Класс

id(PK), name, school_id (FK), client_id (FK) 

Тема

id(PK), name, class_id (FK), class_id (FK), school_id (FK), client_id (FK) 

В этом случае я могу получить все детали от простого запроса, как

SELECT * FROM Subject WHERE id = '2' 

Какой из них лучше, и рекомендовал подход? Мне нравится второй подход, но не уверен, рекомендуется ли его.

ТИА

+0

Почему школа имеет 'client_id' как FK? Что вы пытаетесь сказать по этому поводу? – Vyktor

+0

@Vyktor Каждая школа связана с клиентом. Клиент может иметь несколько школ. – phpsessionid

ответ

0

Производительность мудрый второй подход Бетер на SELECT. Все зависит от того, сколько вам потребуется идентификаторов. То же самое и в структурах программирования. Нужен ли мне указатель на основную структуру или нет? Это зависит от типов операций, которые мы будем иметь. Компромисс - это пространство и синхронизация, что в большинстве случаев не является проблемой, потому что первичный ключ является уникальным идентификатором.

Я бы смешал его. Я бы не поставил все внешние ключи, как вы. Стоит ли таблице Class Class Class Client_id? В вашем случае я бы использовал внешние ключи в теме, но если производительность не является проблемой, я бы использовал объединения.

Также следует отметить school_id и client_id в таблице Subject - это внешние ключи.

Смежные вопросы