我将如何为属于用户、事件、组、网络、页面的相册创建关系(我想支持 x 个可能的所有者)?如果可能的话,甚至稍后支持多个所有者。
一种方法是在专辑表中设置这些列,其中一个具有 FK ID,其余为空。但问题是当我添加更多所有者类型时,我必须不断更改表以添加更多列
另一种方法是为每种所有者类型设置单独的照片表。
这些方法都不能很好地扩展。从一个可扩展的表中为不同所有者类型拥有相册的任何其他方法(这意味着连接更少并且易于查询,因为读取性能是我的第一要求?
平台是 MySQL/PHP。
我将如何为属于用户、事件、组、网络、页面的相册创建关系(我想支持 x 个可能的所有者)?如果可能的话,甚至稍后支持多个所有者。
一种方法是在专辑表中设置这些列,其中一个具有 FK ID,其余为空。但问题是当我添加更多所有者类型时,我必须不断更改表以添加更多列
另一种方法是为每种所有者类型设置单独的照片表。
这些方法都不能很好地扩展。从一个可扩展的表中为不同所有者类型拥有相册的任何其他方法(这意味着连接更少并且易于查询,因为读取性能是我的第一要求?
平台是 MySQL/PHP。
在概念数据模型中考虑您的问题,而不是纯粹的物理问题。如果你做 OO 工作,那也没关系。
半圆是继承运算符。所以 Event、User、Network、Page 都继承自 Owner。
当您将其生成为物理模型时,您将使用这些设置。
通过这种方式,您可以获得一张包含所有可以拥有照片和所有常见属性的表格。然后每个子表将从父表继承 PI,并具有特定于它的属性。照片表的 FK 将转到 Owner 表。
您对照片的许多所有者的未来目标从照片表上的所有者 ID 作为 FK 更改为所有者和照片之间的多对多映射表。如果你使用这些结构真的很容易。
创建一个包含三列的表,专辑 FK、所有者 FK 和所有者类型,所有者类型是用户、偶数、组等的可枚举类型。