我有一个像这样的桌子的足球联赛项目......
LEAGUES TABLE
联盟KEY
联赛名称赛季
团队表
团队KEY
联盟KEY
团队名称
球员表
球员KEY
球队KEY(s)
球员姓名
每支球队都可以在一个联赛中。每个球员都可以分配到每个联赛中的一个球队。 (这是通过Teams Key(s)复合索引字段完成的。)
所以,一名球员可以在3个不同的联赛中的3支球队。这一切都很有效。
我的设计是让每位玩家获得不同的球衣号码,具体取决于您正在观看的球队。
如何设置这样的一对多对多参考?
答案 0 :(得分:3)
您的标题有点误导,因为您拥有
和cqlsh> insert into ks.cf (key,val) values (1,1);
cqlsh> select * from system.hints;
target_id | hint_id | message_version | mutation
--------------------------------------+--------------------------------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1ca6779d-fb41-4a26-8fa8-89c6b51d0bfa | e80a6230-ec8c-11e6-a1fd-d743d945c76e | 8 | 0x0004000000010000000101cfb4fba0ec8c11e6a1fdd743d945c76e7fffffff80000000000000000000000000000002000300000000000547df7ba68692000000000006000376616c0000000547df7ba686920000000400000001
(1 rows)
cqlsh> insert into ks.cf (key,val) values (1,1);
cqlsh> select * from system.hints;
target_id | hint_id | message_version | mutation
--------------------------------------+--------------------------------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1ca6779d-fb41-4a26-8fa8-89c6b51d0bfa | e80a6230-ec8c-11e6-a1fd-d743d945c76e | 8 | 0x0004000000010000000101cfb4fba0ec8c11e6a1fdd743d945c76e7fffffff80000000000000000000000000000002000300000000000547df7ba68692000000000006000376616c0000000547df7ba686920000000400000001
(1 rows)
之间的 多对多 关系:一个团队有很多球员,一个球员可以在很多球队。
确实,FileMaker允许您使用多键字段实现多对多关系。然而,这是一个有一些限制的黑客 - 其中包括无法将任何属性分配给团队到玩家的个人加入,例如所需的球衣号码。
解决多对多关系的正确方法是通过连接表,如下所示:
{
"_id": {"_type": "ObjectId", "_value": "58638a8d6a0b12b41ceec1dd"},
"lastUpdated": {"_type": "ISODate", "_value": "2016-12-28T12:13:12.069Z"},
"createdAt": {"_type": "ISODate", "_value": "2016-12-28T09:49:00.985Z"}
}
Teams
表将包含(至少)字段:
并且Players
表格中没有Teams --< TeamPlayers >-- Players
字段。
答案 1 :(得分:-1)
Answer by michael.hor257k是正确的。您与团队和人员之间存在Many-To-Many关系。
你已经超越了Filemaker的能力。 Filemaker是一个很棒的产品,但它不是一个成熟的关系数据库。我建议考虑(a)4D或(b)具有前端的SQL引擎,如Xojo或Vaadin。
关系数据库设计中的多对多关系始终通过添加第三个表(桥接表)来解决。桥表始终有一对外键,链接到多对多表中的每一个。
多对多的常见例子是书籍和作者,其中一本书可以有一个或多个作者,每个作者可以写一本或多本书。必须添加第三个表“作者身份”。 “作者身份”中的每一行都带有一本书的关键词和一位作者的关键词。如果一本书有两位共同作者,你会在“作者身份”中找到两行,其中包含该书的关键价值。如果作者在她的职业生涯中写过七本书,那么“作者身份”表将有七行带有该作者的关键价值。
仅限当前信息的表格设计如下所示。
person_
表代表每个人。 player_
表表示该人员在团队中的成员资格。如果Susan在三支球队比赛,她有三条player_
条记录,每条记录都链接到她的三支球队之一。她可以在每个团队中拥有不同的球衣号码,因此jersey_number_
列属于player_
表。如果此上下文中的player_
是一个导致您混淆的术语,请对此表桥接member_
和membership_
使用team_
或person_
等。
的问题:
Season
上提到的League
的业务规则和含义。