2014-12-22 1 views
0

У меня есть 4 таблицы в моей базе данных. На следующем рисунке показаны строки и столбцы с именем таблицы, заключенной в красный квадрат. Всего 4 таблицы. Правильно ли я занимаюсь дизайном отношений? Это тестовый проект, и я твердо предполагаю, что я буду использовать JOIN, чтобы получить весь набор данных на одной таблице. Я хочу начать это очень правильно.Дизайн таблицы Django PosgreSQL, внешние ключи, 1 для многих

Вопрос новичка, но нормально ли, например, что таблица издателя имеет 4 строки с Nintendo?

Я использую Django 1.7 вместе с PostgreSQL 9.3. Я стараюсь держаться просто, с тем, чтобы расти.

enter image description here

ответ

1

В основном у вас есть отношения обратно к передней панели здесь ...

Вы game_id (т.е. ForeignKey отношение) на каждом из publisher, developer и platform модели ... но это означает, что каждый из эти объекты могут быть связаны только с одной играми. Я почти уверен, что это не то, что вы хотите.

Вам нужно это наоборот ... вместо того, чтобы положить три внешних ключей на game модели, по одному для publisher, developer и platform.

A ForeignKey - это так называемый many-to-one relation. В этом примере я думаю, что вы хотите, чтобы «многие» игры были связаны с «одним» издателем. То же самое для разработчика и платформы.

Нормально ли, что таблица издателя имеет 4 строки с Nintendo?

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

+0

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

+1

в этом случае вам нужны поля 'ManyToMany' вместо' ForeignKey' в модели 'Game' ... вы все равно хотите только одну строку для каждого издателя в таблице издателя и т. Д. Https://docs.djangoproject.com/en /1.7/topics/db/examples/many_to_many/ – Anentropic

+0

Так много?Нет внешних ключей больше нигде? хм ... Многие игры могут иметь много издателей, например. Я говорю, МОЖЕТ ИМЕТЬ. В большинстве игр есть только 1 издатель и 1 разработчик. Мне нужно это, чтобы разрешить все исключения. –

1

да вы правы, говоря, что-то не так.

Прежде всего, эти скриншоты трудно поддаются, поскольку этот простой пример может работать, но это не тот инструмент, забрать ручку и бумагу и набросать некоторые реляционные диаграммы и подумать о том, какие объекты участвуют в схемы и каковы их отношения, например, вы знаете, что у вас есть издатели, и они могут публиковать игры, поэтому в этом ограниченном примере у вас есть 2 объекта, game и publisher, а среди них publish (в этом случае вы можете разместить fk на игру, если у вас есть один издатель для игры или создать промежуточное отношение для многих и многих случаев). То же самое можно сделать для платформы и игр, почему вы размещаете там fk, что произойдет, если игра с id 2 будет опубликована для nintendo 64? Вы делаете ту же ошибку во всех сущностях.

Подберите любую книгу об основах баз данных, возможно, это поможет в рассуждении о вашем контексте и будущих проблемах.

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