说你有两张桌子
table_a
f1 <- PKEY
f2
f3...
table_b
b1 <- PKEY
b2
b3...
现在说table_a与table_b有 MANY到MANY 的关系
通常你会有第三张表来保持这种关系
table_c
c1 <- PKEY
b1 <- PKEY of table_b
f1 <- PKEY of table_a
也说b1 + f1无论出于何种原因都不能成为table_c的PKEY - 只是为了论证。
现在做以下
是否可行/可行在 table_a 中,您有 MANY_Bs 字段,其中包含许多关系,如下所示:
table_a
f1:1
f2:'xyz data'
MANY_Bs: '1,2,3,4,5'
(因此表明table_a中的第1行连接到table_b的第1-5行)
然后使用以下查询来选择这种关系
SELECT * FROM table_a, table_b WHERE
FIELD_IN_SET (table_b.b1, table_a.MANY_Bs)
我担心的是a)失去表现b)失去正常化(我的大脑有点油腻(b)就在现在)
如果有任何MySQL专家可以看到这样的设置有任何问题吗?
非常感谢
答案 0 :(得分:2)
我认为你会错过使用你提出的方法的一些事情。例如,如果要删除table_b中的内容,则必须在table_a中手动完成级联,不太可读(因为它是非标准的),如果要查找table_a中与table_b行有关系的所有行,它将是因为你不能有任何索引而且必须遍历table_a中的所有行以确保你找到它们。
答案 1 :(得分:1)
我不确定我是否理解你,但如果你想要从table_a到table_b的一对多关系,你只需要将一个外键f1从table_a添加到table_b。
答案 2 :(得分:1)
现在说table_a有一对多 与table_b的关系
通常你会有第三张桌子 保持这种关系
不,你通常不会有第三张表来表示一对多关系。
请参阅MySQL documentation,它非常清楚地解释了一对多的关系。
答案 3 :(得分:0)
您使用外键关系执行一对多。使用MySQL,使用InnoDB执行此操作。
你可以使用中间的桌子处理多对多。这就是它的完成方式。
现在,你有了一个选择 - 你可以重新发明轮子(不,不要!)或者你可以充分利用一些非常聪明的人制定数据库理论的事实(读取skinny的规范化然后,这是非常重要的,所有其他聪明的人都已经开始构建关系数据库(如MySQL,PostgreSQL,SQL Server,Access,Oracle等)基于他们所做的一切已完成所有数据库理论。皱纹,这里的变化,但它几乎都基于相同的东西。
所以,如果您要设计和构建数据库,请花些时间阅读它们背后的理论,并在脑海中清楚地了解,因为那时您将能够与< / em>数据库,而不是尽管数据库!
这有意义吗?我不是听起来很讽刺,这是我给出的建议,它对我有用!