MySQL点遍历。。。可能的

MySQL点遍历。。。可能的,sql,mysql,orm,Sql,Mysql,Orm,所以我正在开发一个CMS,它允许用户“遍历”数据库表。不过,我在实现它时遇到了一些困难,我想知道是否有人有任何建议 Table: house name (varchar), town (relationship, using the rel table) Table: town name(varchar), state (relationship, using the rel table) Table: state name(varchar) Table: rel id1, id2, re

所以我正在开发一个CMS,它允许用户“遍历”数据库表。不过,我在实现它时遇到了一些困难,我想知道是否有人有任何建议

Table: house
name (varchar), town (relationship, using the rel table)

Table: town
name(varchar), state (relationship, using the rel table)

Table: state
name(varchar)

Table: rel
id1, id2, rel_type
下面的示例显示了它的预期用途。上面写着,“在阿拉斯加州找到10所房子,按名字排序”

您需要使用,例如:

SELECT
   house.*
FROM
   house
   JOIN town ON town.id = house.town
   JOIN state ON state.id = town.state
WHERE state.name = 'Alaska'
该查询将使用1:N关系,但由于您使用的是M:N关系(以一种奇怪的方式实现),因此您将需要连接更多的表

这使得对象模型更复杂一些,您必须考虑为此类查询提供一个新的API。或者使用一个现有的ORM系统(看看它是如何实现的)

为了解释1:N vs M:N的问题,在设计良好的数据库中,让ID指向没有外键约束的其他表并不常见。建模M:N关系的常用方法是:

  • 房子:id int(PK),名字varchar
  • house_town:house int(主键,FK引用house.id),town int(主键,FK引用town.id)
  • 城镇:id int(PK),名称varchar
对于1:N关系:

  • 房子:id int(PK),名字varchar,town int(FK引用town.id)
  • 城镇:id int(PK),名称varchar
您需要使用,例如:

SELECT
   house.*
FROM
   house
   JOIN town ON town.id = house.town
   JOIN state ON state.id = town.state
WHERE state.name = 'Alaska'
该查询将使用1:N关系,但由于您使用的是M:N关系(以一种奇怪的方式实现),因此您将需要连接更多的表

这使得对象模型更复杂一些,您必须考虑为此类查询提供一个新的API。或者使用一个现有的ORM系统(看看它是如何实现的)

为了解释1:N vs M:N的问题,在设计良好的数据库中,让ID指向没有外键约束的其他表并不常见。建模M:N关系的常用方法是:

  • 房子:id int(PK),名字varchar
  • house_town:house int(主键,FK引用house.id),town int(主键,FK引用town.id)
  • 城镇:id int(PK),名称varchar
对于1:N关系:

  • 房子:id int(PK),名字varchar,town int(FK引用town.id)
  • 城镇:id int(PK),名称varchar
SELECT
   house.*
FROM
   house
   JOIN town ON town.id = house.town
   JOIN state ON state.id = town.state
WHERE state.name = 'Alaska'