0

我正在开发自己的家谱软件,我希望能够在其中为事件添加无限数量的来源、笔记和地点。但是我对源表有疑问。不可能创建一个适合所有类型源的表。

来源示例

资料来源:信

  • 日期
  • 文本

来源:互联网

  • 网站
  • 日期
  • 文本

资料来源:人口普查

  • 状态
  • 地址……等等。

所以到目前为止我的解决方案是为每种源类型创建一个特殊的表并将它们链接到一个 event_vs_source 表

ID             INT
eventID        VARCHAR
sourceID       INT
sourceTable    VARCHAR

数据将是:

ID          453
eventID     67
sourceID    345
sourceTable source_letter

source_letter

ID        INT
To        VARCHAR
From      VARCHAR
Date      DATE
Text      BLOB

但问题是当我想获取连接到单个事件的所有源时。

SELECT * FROM event_vs_source WHERE event_vs_source.eventID = 67;

这给了我一个带有源表名称 source_letter 的数组,但是如何在 JOIN 中使用它来选择正确的表并在其中找到源 ID?如果我进行单独的查询,我可以做到这一点,但是如果我有多个源连接到一个事件并且它们都在不同的源表上怎么办?

event_vs_source

ID          486
eventID     67
sourceID    23
sourceTable source_website

这将导致更多单独的查询。

还是我设计这个数据库错了?有更好的方法吗?

底线是,我希望能够为单个事件添加尽可能多的来源、地点和注释,但也希望能够添加无限的新的和未知的未来表格,但每个人有一些数据库请求。请记住,一个人可以处理无限量的事件......

4

0 回答 0