【问题标题】:Database - Create table with 2 fields pointing to the same table数据库 - 创建表,其中 2 个字段指向同一个表
【发布时间】:2013-03-13 15:42:36
【问题描述】:

我需要在数据库中创建一个表,其中包括 - 以下列 -

table name - transaction  
time, source-address, destination-address

我有一个这样的地址表 -

table name - address
address id, address, type (home/office/etc...)

我只想保留一个从源地址和目标地址字段指向“地址”表中条目的指针。

交易也可以在同一个地址之间进行 - 例如,可以从家庭地址到家庭地址或从家庭地址到工作地址,所有这些都是合法的。

最好的方法是什么?

SAMPLE DATA -  
ADDRESS  
ID    ADDR       TYPE  
1     x-street   home  
2     y-street   work  

TRANSACTION  
TIME    SRC      DST     
08:00      1     1  
08:15      2     1  
....

我想将TRANSACTION 表连接到ADDRESS 表,但我不确定是否可以使用外键来完成,因为这里我有相同的键 - 表 ADDRESS 中的 ID,它连接到 @ TRANSACTION 表中的 987654326@ 和 DST 字段。

如果能获得关于什么是完成我需要做的事情的最佳方式的方法描述,我将不胜感激 - 比如设计建议。

【问题讨论】:

  • 你知道主键和外键是干什么用的吗?
  • 地址表中的类型字段是否表明它是源还是目标?
  • 是的 - 确定我知道主键和外键的用途,并且我有一个基于地址表中外键的关系。问题是我如何从同一个表中获得 2 个外键?
  • No - 地址表中的类型字段是地址类型 - home/work/etc...有可能是同一个客户从家到工作地址之间进行的交易。
  • @Nik - 请以易于理解的形式发布示例数据预期结果

标签: sql database database-design create-table


【解决方案1】:

你的桌子看起来不错。

以下查询将允许您使用地址获取交易:

SELECT t.time, src.address "Source Address", dst.address "Destination Address"
from Transaction t
JOIN Address src ON t.src=src.id
JOIN Address dst ON t.dst=dst.id
SORT BY t.time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2017-03-23
    • 2013-07-17
    • 2022-11-11
    • 1970-01-01
    • 2021-01-25
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多