我们的数据库包含 5+ 表
user
----------
user_id (PK) int NOT NULL
name varchar(50) NOT NULL
photo
--------
photo_id (PK) int NOT NULL
user_id (FK) int NOT NULL
title varchar(50) NOT NULL
comment
-------
comment_id (PK) int NOT NULL
photo_id int NOT NULL
user_id int NOT NULL
message varchar(50) NOT NULL
所有主键 ID 都是唯一 ID。
所有数据都链接到http://domain.com/ {primary_key_id}
用户访问带有 id 的链接后,该链接对所有表都是唯一的。
我应该如何实现以查找此 id 属于哪个表?
解决方案 1
select user_id from user where user_id = {primary_key_id}
// if not found, then move next
select photo_id from photo where photo_id = {primary_key_id}
... continue on, until we find which table this primary key belongs to.
解决方案 2
- 创建对象表来保存所有 uniqe id 和数据类型
- 在所有表上为 AFTER INSERT 创建触发器,以使用其数据类型在对象表中创建行,该数据类型已插入到选定表中
- 需要时,然后执行 select 语句以查找 id 所属的表名。
第二种解决方案将是双插入。1 将行插入到具有完整数据的实际表中,2 插入用于在我们在步骤 1 中创建的对象表中插入唯一 id 和表名。
select type from object_table where id = {primary_key_id}
解决方案 3
- 将表名 + id = 编码为新的唯一整数 - 使用 php
- 解码 id 并获取带有表名的原始 id(即使它只是数字类型)
我不知道如何在 php 中实现这一点,但这个解决方案听起来更好!?你有什么建议?