Проектирование базы данных: проблемы, связывающие идеи - PullRequest
0 голосов
/ 07 июля 2011

Я наткнулся немного на стену ... вот моя упрощенная схема:

TABLE users
id

TABLE assets
id
userid

TABLE presentations
id
userid

На этом этапе легко создать отношения между ПОЛЬЗОВАТЕЛЯМИ -> АКТИВАМИ и ПОЛЬЗОВАТЕЛЯМИ -> ПРЕЗЕНТАЦИИ... но я сталкиваюсь с чем-то вроде головокружения, когда я представляю ШАБЛОНЫ для ПРЕЗЕНТАЦИЙ:

TABLE templates
id

Видите ли, каждый ШАБЛОН имеет несколько позиций ... не все ШАБЛОНЫ имеют одинаковое количествопозиций.В каждой позиции находится АКТИВ или она пуста.

Я с трудом пытаюсь выяснить, каким способом лучше всего связать ПРЕЗЕНТАЦИИ -> ШАБЛОНЫ (и позиции) -> АКТИВЫ ... и сохранитьИмейте в виду, что не все АКТИВЫ связаны с ПРЕЗЕНТАЦИЕЙ.

Предлагаемая схема:

TABLE presentations
id

TABLE templates
id

TABLE positions
id
templateid
assetid

Но с этим есть проблема.Это предполагает, что каждый ШАБЛОН может просто случайное количество ПОЗИЦИЙ.Да, ШАБЛОН имеет 1 - n отношение с ПОЗИЦИЯМИ, но не совсем.Потому что ШАБЛОН не был бы ШАБЛОНОМ, если бы его нельзя было повторить.ШАБЛОН 1 имеет 4 позиции и всегда будет 4.

Ответы [ 2 ]

1 голос
/ 09 июля 2011

ОК, посмотрим, как обещали:

table Presentation
int id
varchar name
int fk_template (references template.id)
....

table Template
int id
varchar name
.....

table Position
int id
int zorder (if it is the 1st, 2nd, 3rd position of the given template)
int fk_template (references Template.id)
.....

table Asset
int id
varchar name
varchar description
....

table AssetForPresentation
int fk_asset (references Asset.id)
int fk_presentation (refernces Presentation.id)
int fk_position (ferences Position.id)

Теперь у вас есть шаблоны с фиксированными позициями.Каждая презентация использует один шаблон.Для каждой презентации и каждой позиции в этой презентации вы можете определить один актив или ни одного.Вы должны убедиться, что в таблице AssetForPresentation используются только идентификаторы позиции, которые на самом деле являются членами шаблона, используемого в этой презентации.Если позиция данной презентации не имеет актива, просто не создавайте запись в таблице AssetForPresentation.

0 голосов
/ 07 июля 2011

Я не уверен, правильно ли я понял:

table templates
id

table position
id
fk_templateid 
fk_assetid

Имея значение fk_assetid для допуска позиций без активов.

И если в каждой презентации используется ровно один шаблон, добавьте fk в представление таблицы.ссылка на templates.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...