我正在构建prog逻辑,该逻辑遍历MySQL模式中的所有表和视图,并为DB持久性创建PHP对象。我的DAO层。这些对象也有CRUD方法,但也有Finder方法。在INFORMATION_SCHEMA中,有关于每个表的信息,哪些列是PK,但不是视图。我需要动态地查看哪些列是View中的PK。在View中查找主键列
比方说,我们有简单的一对多关系(如ProdTypes和产品)
- ProdTypes [ProdTypeId,ProdTypeName] < - ProdTypeId = PK
- 产品[PRODID,PRODNAME,ProdTypeId ] < - 两个PRODID = PK,ProdTypeId = FK
和一个视图作为简单的SELECT联接的表:
SELECT p.prodid,p.prodname,t.prodtypename
FROM products p
JOIN prodtypes t ON t.prodtypeid=p.prodtypeid
当创建这样的视图时,MySQL将在INFORMATION_SCHEMA中表示此视图没有主键(确定,因为它是视图)。但是我们知道ProdId
是在这个视图中唯一定义记录的列!所以虽然它不是正式的PK,但是这个列有这个功能,可以假定为PK。可以创建findByProdId()
方法,它将始终返回1条记录(如果找不到则返回0)!
问题是如何找出视图中的哪些列唯一地定义(!s)记录!?或者什么是(非官方)主键?