数据库设计:麻烦连接想法

时间:2011-07-07 02:14:27

标签: mysql database database-design database-schema

我碰到了一堵墙......这是我简化的架构:

TABLE users
id

TABLE assets
id
userid

TABLE presentations
id
userid

此时,很容易在USERS之间建立关系 - >资产和用户 - >介绍......但是当我为介绍介绍TEMPLATES时,我遇到了一点大脑放屁:

TABLE templates
id

你看,每个模板有几个位置......并非所有模板都有相同数量的位置。每个职位都有一个ASSET或是空的。

我很难弄清楚哪种方式是连接演示的最佳方式 - >模板(和位置) - >资产......请记住,并非所有资产都与演示相关联。

建议的架构:

TABLE presentations
id

TABLE templates
id

TABLE positions
id
templateid
assetid

但这有一个问题。这假设每个模板只能是一个随机数量的位置。是的,TEMPLATE与POSITIONS有1-n的关系,但不是真的。因为如果TEMPLATE不可重复,它将不是TEMPLATE。模板1有4个位置,总是有4个位置。

2 个答案:

答案 0 :(得分:1)

好的,让我们看看承诺:

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中仅使用实际上是此演示文稿使用的模板成员的位置ID。如果给定演示文稿的位置没有资产,则不要在表AssetForPresentation中创建条目。

答案 1 :(得分:0)

我不确定我是否理解正确:

table templates
id

table position
id
fk_templateid 
fk_assetid

使fk_assetid可以为空,允许没有资产的位置。

如果每个演示文稿只使用一个模板,则在表格演示文稿中添加fk引用templates.id。