推进:没有交叉表的多对多关系
Posted
技术标签:
【中文标题】推进:没有交叉表的多对多关系【英文标题】:Propel: many-to-many relationship without crosstable 【发布时间】:2014-01-27 09:57:02 【问题描述】:我最近接到学校的一个任务,我必须为 ORM 创建一个 Propel Schema。 这并不是真正的问题,但其中一个要求是以多对多关系连接其中两个表。
通常,您会使用交叉表(保存两个表中的属性)来做到这一点,但我们的老师说,如果没有这样的交叉表,这也是可能的(甚至是必需的)。
如何在 Propel 中创建这样的?
有问题的 ERD:
http://files.f-o-g.eu/b8f8a9
(我被困在 VIP Einladung)
到目前为止,我有这个:
<?xml version="1.0" encoding="UTF-8"?>
<database name="orm1" defaultIdMethod="native">
<table name="einladung" phpName="Einladung">
<column name="nummer" type="INTEGER" primaryKey="true" autoIncrement="true" />
<column name="fbuffet" type="BOOLEAN" />
<column name="splatz" type="INTEGER" />
</table>
<table name="sorganisation" phpName="SpendenOrganisation">
<column name="name" type="VARCHAR" size="255" primaryKey="true" required="true" />
<column name="adresse" type="VARCHAR" size="255" />
</table>
<table name="wveranstaltung" phpName="WVeranstaltung">
<column name="titel" type="VARCHAR" size="255" primaryKey="true" required="true" />
<column name="datum" type="DATE" required="true" />
<column name="ort" type="VARCHAR" size="255"/>
</table>
<table name="vip" phpName="Vip">
<column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
<column name="vname" type="VARCHAR" size="255" required="true" />
<column name="nname" type="VARCHAR" size="255" required="true" />
</table>
</database>
有人知道吗?
【问题讨论】:
希望是英文的。我什至找不到这些表之间的共同链接! 翻译:左侧 (VIP) (vorname= firstname, nachname=lastname);右侧:Einladung(邀请)(freies Buffet = 免费自助餐,sitzplatz = 座位,nummer = 号码);介于 (bekommt = get) (spenden betrag = 捐赠金额) 【参考方案1】:没有交叉表就不可能创建 m 对 m 关系。
我猜你的VIP -> Einladung
关系是错误的。应该是一对一的关系。
【讨论】:
嗯,关系是正确的(这就是我们得到的规范)。无论如何,正如我所猜测的,没有这样的交叉表是不可能的。将接受您的回答。以上是关于推进:没有交叉表的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章