Mysql 关系数据库、照片、投票和警告

Mysql 关系数据库、照片、投票和警告,mysql,database,data-structures,Mysql,Database,Data Structures,我正在设计一个关系数据库,但我没有太多经验,所以我想问一个关于带照片的关系表的建议 我想使用表来存储照片,以及一个或多个用于用户数据和主题链接的表,这样照片可以链接到不同的主题,例如到房屋,或树,在这种情况下,我可以使用以下结构: table_houses - house_id - house_name - house_architect_name, house_..., etc. table_trees - tree_id - tree_name - tree_plant_type, tre

我正在设计一个关系数据库,但我没有太多经验,所以我想问一个关于带照片的关系表的建议

我想使用
来存储
照片
,以及一个或多个用于用户数据和主题链接的表,这样照片可以链接到不同的主题,例如到
房屋
,或
,在这种情况下,我可以使用以下结构:

table_houses
- house_id
- house_name
- house_architect_name, house_..., etc.

table_trees
- tree_id
- tree_name
- tree_plant_type, tree_..., etc.

table_photos
- photo_id
- photo_filename
- photo_date
- photo_user_id

table_rel_houses
- rel_id
- rel_house_id
- rel_photo_id
- rel_user_id
- rel_vote_id
- rel_warn_id

table_rel_trees
- rel_id
- rel_tree_id
- rel_photo_id
- rel_user_id
- rel_vote_id
- rel_warn_id

table_warns, table_votes, etc.
在这种情况下,关系表应该具有相同的结构,因为它们以相同的方式工作,但指向不同的主题(房屋或树类型)

数据的结构是否正确,或者我是否应该在
表rel\u投票
表rel\u警告
中更多地组合关系表


我需要一个更大的照片和缩略图来导航其他的经典页面,我必须考虑这个结构可以存储数百万张照片行。

< P>你可以考虑把你的数据库建模如下:

table_photos
- photo_id
- photo_filename
- photo_date
- photo_user_id
- vote_id
- warn_id
- type
- detail_id

table_houses
- id
- name
- style

table_trees
- id
- name
- species
在这种情况下,您可以在
类型
字段中定义照片主题,例如1=树,2=房子等。您仍然可以在不重复数据的情况下拥有同一主题的多张照片,但您将不必使用重复的列架构构建
表\u rel\u xxx
表。如果可能的话,我宁愿避免这样做

在这种情况下,您将能够生成如下查询:

SELECT 
    table_trees.name
FROM
    table_photos
INNER JOIN
    table_trees ON 
    (table_trees.id = table_photos.detail_id AND table_photos.type = 1);
或者只需查询所有照片,而不使用特定类型的“后期绑定”:

SELECT 
    photo_filename
FROM
    table_photos;
您可能有兴趣查看以下与此数据库模型相关的文章:

这些技术试图在关系数据库中实现多态关联,尽管SQL在语言级别上不支持这种技术

这种方法的一个缺点是它使得外键约束很难定义。您需要一个外键约束来保证,如果
table\u photos
正在引用table\u树中的一行,那么该行确实存在。以下EMC文章介绍了外键问题的解决方案,并给出了一个很好的示例: