我目前正在构建一个使用PHP和MySQL发布故事的小型Web应用程序。每个故事可以是一篇文章(有很多字段和数据),只是一个超链接/ url,只是一个图像,或者是具有特定属性的可下载文件(再次有很多字段)。具有不同内容的连续表
我的问题与找到系统的最佳数据库布局有关。我曾考虑过3种不同的解决方案,这些解决方案可能会也可能不起作用(字段仅仅是示例,不会因数据是否应存储在数据库中而受到影响):
1)为每个键入并且只是UNION他们。 E.g:
文章
id | date | title | author | preview | last_edited | category | content
超链接
id | date | title | author | url
图片
id | date | title | author | thumbnail | fullimg
文件
id | date | title | author | filetype | filename | filecontent
是否有可能创建一个SQL语句,以这种方式将每个字段添加到来自各个表的行中,并将各个行的“标记”类型取决于哪个表的来源?或者我必须解决的只是常见的领域(3-4字段将是相同的每个表),并为每个行的单独查找?
2)根据类型制作某种引用正确表和行的索引表?
索引
id | type | title | date | referenceid
- >文章,超链接,图片或文件取决于“类型”字段。
使用外键时,这种方式有可能以某种方式吗?我怀疑没有,但是不确定你能在MySQL中做什么,不能做什么。
3)所有类型的所有字段在同一个表中,只是使特定字段为空(我不太喜欢这个解决方案,因为它看起来凌乱)。
任何想法?
我怀疑我不能成为第一个遇到引用不同实体类型/字段的问题,这取决于某种类型。
想法是高度赞赏。
这样解决它的性能损失会是什么?我对找出可能的解决方案的不同优点和缺点非常感兴趣。 – agnsaft 2012-07-06 14:43:46
联盟本身就很慢。对于SQL Server,UNION ALL要快得多 - 不确定mySQL。但是与其他数据库一样,性能取决于太多隔离因素。除非你处理数据库,否则我不希望这个查询成为瓶颈。 – Bill 2012-07-06 16:01:46