【问题标题】:Creating foreign key in Visual Studio 2010在 Visual Studio 2010 中创建外键
【发布时间】:2012-01-05 17:44:00
【问题描述】:

我正在尝试在 Visual Studio 服务器窗格中创建 2 个表,但在创建外键时遇到问题。

当我尝试在关系页面中创建它们时,它不会让我创建外键,直到我将它们设为主键。

我不明白为什么我的表中不能有一个不同的成员,它是主键,而不同的成员是外键。

我的桌子是这样的:

餐桌人:

主键:ID int 名称 nvarchar 年龄整数 城市 nvarchar 外键:AccountNumber int --> 当我让他成为主键时,一切正常。

表银行账户:

主键和外键:AccountNumber int 钱浮动

ps。 我在 CMD 中使用了一些 mysql,我记得我可以这样做,但是因为我在 Visual Studio 中没有这个控件,所以我迷路了。

更新: Rup 提出了一个很好的观点,我只是在回答他问我的问题后才意识到 我刚刚为银行账户表做了房地产交易(外键),现在我得到了 我想要什么,谢谢!

【问题讨论】:

  • 谢谢 :) 我不知道该怎么做。
  • 我不清楚 PK 和 FK 是哪条路。 BankAccount.AccountNumber 应该是 PK 而不是 FK,People.AccountNumber 应该是 BankAccount.AccountNumber 的 FKR。它不应该是一个PK,事实上它不应该。您是否试图以错误的方式进行 FK?您在 Visual Studio 中连接到哪个数据库引擎?如果您愿意,它几乎肯定会接受 SQL。
  • 我不确定我正在使用的引擎,但它是 Visual Studio 附带的缺陷。我不明白我该如何以磨损的方式进行 FK,我只想确保我有一个 ID我应该尝试从银行帐户表中添加基本密钥和作为 AccountNumber 的伪造密钥吗?
  • 那么可能是 SQL Server Compact 或 Express。如果它希望您将 People.AccountNumber 设为主键,那么您已经在尝试从银行帐户表中添加外键,不是吗?您想从 People 表端添加它。
  • 是的,我做了什么,哈哈,我在第一次回答你的问题后就开始使用它了,谢谢你的快速回复:)

标签: sql visual-studio


【解决方案1】:

为什么 BankAccount.AccountNumber 是外键?您是否试图回溯到拥有它的人?

如果是这样,BankAccount 应该是:

CREATE TABLE BankAccount
(
   AccountNumber int PK,
   Money float,  // bad idea.  Use currency or int (i.e. store balance as pennies)
   Owner int FK REFERENCES People.ID
)

并从人员表中删除帐户 ID。

这模拟了“一个帐户只有一个所有者”的关系,并允许“一个人可以有多个帐户”的关系。

看起来您正在尝试创建一个反向引用。如果您选择这样做,那么对所有者的反向引用应该在 People.ID 上,而不是在帐户上。 -- 虽然这是不必要的,因为您可以简单地查询

SELECT * FROM
BankAccount INNER JOIN People ON BankAccount.Owner = People.ID

获取所有帐户及其所有者。

如果您想为一个帐户建立多个所有者,并且每个用户有多个帐户,那么您需要建立第三个表来实现多对多关系。

CREATE TABLE AccountOwners
(
   AccOwnID int PK,
   AccountID int FK REFERENCES BankAccount.AccountNumber,
   PeopleID int FK REFERENCES People.ID
)

并删除 People.AccountNumber 和 BankAccount.Owner。这种技术类似于维护您可以查询的所有帐户和所有者的列表。

【讨论】:

  • 哇,谢谢你,这让我明白了很多事情!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多