обработка трех таблиц с двумя отношениями один-ко-многим среди них - PullRequest
1 голос
/ 18 ноября 2011

У меня есть три таблицы: A, B и C. В A много B, а в B много C. Как лучше всего спроектировать первичные ключи и отношения между этими двумя.Извините, что задаю проблему проектирования, но я не знаю, использовать ли

  1. одну дополнительную таблицу для сопоставления A (pkey) - B (pkey) - C (pkey) ИЛИ
  2. две таблицы exta для сопоставления AB и BC по отдельности ИЛИ
  3. использование связей внешнего ключа без использования каких-либо дополнительных таблиц (если так, скажите, пожалуйста, как должны располагаться ключевые столбцы)

Спасибоочень сильно.

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

Вариант (3) звучит как самый естественный:

A: { id, *, *, ... };

B: { id, a_id references(A.id), *, *, ... }

C: { id, b_id references(B.id), *, *, ... }

На запрос:

SELECT ... FROM A JOIN B ON (A.id = B.a_id) JOIN C ON (B.id = C.b_id);

Всегда делайте модель вашей базы данных логическими отношениями в ваших данных, а не наоборот!

2 голосов
/ 18 ноября 2011

Вариант 3 - это путь.

A {a_pk, ...}
B {b_pk, ..., a_pk_as_fk}
C {c_pk, ..., b_pk_as_fk}
2 голосов
/ 18 ноября 2011

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

...