跨表的唯一标识符

时间:2011-01-21 06:16:10

标签: php mysql uniqueidentifier

首先:我看过类似的问题,但没有找到答案。对不起,如果这是重复。

我对MySQL很陌生。

假设我有三张桌子:房屋汽车办公楼

所有这些东西都有窗口,所以我也需要一个 Windows 表。

现在,每个窗口可以是向上或向下,双窗格或单窗格等。每个窗口都有(如果不应该,请更正)一个唯一的ID。每个窗口还需要记录谁打开或关闭它,这就是为什么我认为首先需要Windows表。

问题:每个窗口必须有一个parent_id。但是,如果有一辆ID为XX的车,以及一个具有相同ID的办公楼和房屋,就会出现问题。当我的页面加载时,我如何知道窗口的放置位置?

我认为这个问题有很多答案......我正在寻找最好的方法。

P.S。 Windows,汽车,房屋和办公楼只是说明性的例子。不是我的实际数据。

2 个答案:

答案 0 :(得分:2)

那么你所说的是每个窗口都属于房屋,汽车或办公楼?已建立的模式是多态关联,这只是一个奇特的词,用于“将相关模型的类型与其ID一起存储”:

Table `windows`
===============
id
parent_id
parent_model
...

window(1, 42, 'house', ...)
window(2, 7, 'car', ...)
...

这样可以轻松选择性地加入和查询:

SELECT * FROM `windows` JOIN `cars` ON
   (`windows`.`parent_model` = 'car' AND `windows`.`parent_id` = `cars`.`id`)
   ...

答案 1 :(得分:1)

您可能还需要一个表来映射哪个窗口映射到哪个实体(汽车/房屋/办公室)

Table: window_mapping   
Columns: id (primary key / auto generated)
         Window_id (not null, ref to Window table primary key)
         Entity_id  (not null, ref to car /house /office table primary key) 
         entity _def (text with values, Car / house /office) 

或者还有一种表格方法

Table: window_mapping   
Columns: id (primary key / auto generated)
         Window_id (not null, ref to Window table primary key)
         house_id  (not null, ref to house table primary key) 
         car_id  (not null, ref to house table primary key) 
         office_id  (not null, ref to house table primary key) 

我更喜欢1'虽然

如果您扩展用户,我可以尝试提供更多帮助