这可能是一个荒谬的问题,有一个比我倾向于这里更直接的解决方案,但我希望有人可以给我一个很好的解决方案!
假设我有一个包含多个表的数据库,如下所示:
**table_users**:
id, username, email, password
*example*
testuser, testuser@test.com, 123456
**table_services**:
id, service_name
*example*
0, Shipping
1, Payments
2, Packaging
**table_markets:**
id, market_name
*example*
0, Fashion
1, Food
2, Healthcare
**table_user_attributes:**
user_id, table_name, attr_id
*example*
0, 'table_markets', 1
0, 'table_services', 0
0, 'table_services', 2
在此示例中,用户属性表的用户ID为0,与“Food”市场以及“Shipping”和“Packaging”服务相关联。
这个例子中我在这个属性列中有表名的原因是这些属性ID可以来自不同的表(在这种情况下是服务,市场),我需要知道哪个表查找attr_id for。< / p>
我的第一个问题是 - 我猜测我是以非常愚蠢的方式进行表名设置,是否有更好的方法来找到可能来自哪些表,然后才能使用在你的下一个查询中?
我的第二个问题是,假设这是正确的,我将如何设置查询来执行以下操作:
查找用户,获取用户ID,使用我收到的用户ID查找table_user_attributes中的所有条目,然后(这里是问题部分)获取表名并查询具有ID的那些...即:
SELECT table_users.username, table_users.id, table_user_attributes.table_name,
table_user_attributes.attr_id
FROM table_user_attributes
INNER JOIN table_users ON table_user_attributes.user_id=table_users.id
如果我理解正确,该查询将获取用户信息,以及与该用户ID关联的table_user_attributes,但之后我不知道如何从此信息中提取相应的服务/市场。< / p>
我希望这是有道理的,这是一个奇怪的问题 - 基本上我的目的是将用户属性保存在一个表中,但是他们指向的ID可以来自多个不同的表,我需要一种方法来知道从哪个表与USER id关联的每个ID都来自于我可以查找并获取其名称。
问题可能进入:
数据库设计 - 我很确定这不完美(这也不存在,这是我写一个理论的例子,我还没有建立任何表,设置主键等等试图包装我首先围绕这个问题。
查询 - 这将根据设计而改变 - 但是,如果我使用上面的内容,我不知道id如何使该查询起作用。
可能会出错 - 所以任何帮助都非常感谢!
修改的
我也意识到最简单(也可能是最好的)解决方案就是为每件事物设置一个单独的表格,例如:
table_user_services
table_user_markets
等 - 但我想我只想检查这是否是最有效的解决方案,或者这是否是一个更btree / sql友好的解决方案。