2012-04-21 3 views
0

У меня есть базовая модель данных, которую я хочу реализовать в MySQL. Я буду использовать mysqldb и SQLalchemy для выполнения части данных, беря некоторые данные из некоторого XML.Внешние ключи и основные реляционные таблицы

Я не уверен, как реализовать то, что я хочу сделать, и я подумал, может ли кто-нибудь указать мне в правильном направлении.

У меня есть несколько таблиц, и каждая таблица содержит раздел данных.

Table 1 - recordTitle, recordID, recordDate 
Table 2 - recordProp1, recordProp2, recordProp3 
Table 3 - recordPropA, recordPropB, recordPropC 

Все таблицы являются уникальными в своем собственном пространстве, но T1 может иметь много t2s и T3S и T2/T3 может принадлежать многим T1s. Имеют смысл?

я понял, как разрешить это было иметь 4-й стол: -

Таблица 4 - T1ref, T2ref, T3ref

и есть новый colunm в T1-3, который называется TnRef и является в основном первичный ключ для этой таблицы.

  1. Звучит ли это как разумный подход?
  2. Я понял, когда вы заполняете данные, мне нужно проверить каждую запись таблицы для уникальности, если это так, я фиксирую значение TnRef, и если он не вставляет новую строку и после этого собирает значение TnRef. Как только у меня есть значение, я могу заполнить строку T4, которая связывает все вместе.
  3. Является ли ORM правильным инструментом для этого?
+1

Он не выглядит нормализованным. – Flavius

+0

Это абстрактное обозначение фактической базы данных. Меня больше интересует механика того, как вы реализуете FK и PK в MySQL. Я думаю, что фактическая модель данных нормализована, насколько я понимаю этот процесс. –

ответ

2
  1. Для многих-ко-многим, как вы описали, да я думаю, что это имеет смысл иметь четвертую таблицу, связывающую записи T1 с T2 (ами) и Т3 (ов). Я думаю, вы захотите добавить ключевой столбец в T2 и T3, чтобы включить T4 для правильного хранения ссылок.

  2. Я предполагаю, что вы имеете в виду, что T2 и T3 будут расширяться и что ваше приложение будет выдавать запросы (например), добавить {recordProp1 = someval, recordProp2 = someotherval} в заданную запись в T1. Если да, то да, вы бы хотели сначала выполнить поиск на T2, а затем вставить его в T4 на основе ключей T1 и T2.

  3. Я думаю, что ORM - это абсолютно правильный инструмент для этого. Конечно, вы захотите убедиться, что все отношения внешнего ключа правильны в MySQL. Но SqlAlchemy может обрабатывать отношения «многие ко многим». Посмотрите: http://docs.sqlalchemy.org/en/latest/orm/relationships.html#many-to-many

+0

Удивительный, спасибо - я планирую иметь ключевой столбец во всех трех таблицах и использовать t4 как «брокер», который поддерживает отношения, которые я пытаюсь захватить. Цените свое время, я буду читать по вашей ссылке. –

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