如何将 1:1 关系转换为 1:N 关系
How to convert a 1:1 relation into a 1:N relation
我有一个数据库 SQL 没有很好地实现和一些问题。
1.the fk 似乎效果不佳我必须进行单独的查询以在所有 table 中添加一个值,
第一个table它很奇怪但是是正确的,它必须与其他标签分开(我必须添加,取消,修改)同时在标签tabList和tabSE中。
我要实现 tabSE 和 tabSD 之间的关系 1:N(不知道该怎么做)实际上目标是 select(形成 c# bla bla bla) 一堆项目,单击开始并存储在 mm/dd/yyyy 我已经开始项目的信息(通过单击 buttonStart),id (1,5,3,6,8) 为example 和 start 得到了一个结果 bla bla bla,它在 mm/dd/yyyy 那天结束了。我认为也许 Union 是没有意义的,从 tabSD 可能 NomeI 不必存在,不知道。帮助
从上到下:
如果您在 tabStoreExec 和 tabStoricoDetail 之间有 FK,您可以自动执行的唯一两件事是 UPDATE 和 DELETE 与关键字(或选项配置 table)CASCADE
我想这是一个 "temporary" table 用作界面实用程序的后盾。
制作1:N。我认为最好的是 delete table Union,然后你必须 在 tabStoricoDetail 上创建一个复合键,例如 id 和 idDetail,并让 FK 完成他的工作,只链接两个 tables:
的 id
tabStoreExec.idSE -> tabStoricoDetail.id
我给你一些 CREATE TABLES 代码示例,可以按你的意愿工作:
CREATE TABLE tabStoreExec (
idSE INT --PRIMARY KEY --Coul be done here, but can't be named
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, DateStarSE DATE --or DATETIME, depends if you want the time too
, DateEndSE DATE
, CONSTRAINT PK_tabStoreExec PRIMARY KEY (id)
, CONSTRAINT FK_tabStoreExec_idSE_id FOREIGN KEY (idSE) REFERENCES tabStoricoDetail(id) ON DELETE CASCADE ON UPDATE CASCADE --use this in case you want to propagate the delete/update action from this table to referenced.
);
CREATE TABLE tabStoricoDetail (
id INT
, idDetail INT
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, resItemDet VARCHAR(100)
, CONSTRAINT PK_tabStoricoDetail PRIMARY KEY (id, idDetail)
);
希望对您有所帮助。
编辑:
是的,联盟table可以消失
FK是两个table之间的"connector",它给你数据完整性,复合PK就是可以有1:N关系。我在这里给你一个示例架构以获得更好的帮助:
Sample Schema
一般来说,您应该 post 只回答一个问题,而不是多个问题。这样的post很难在论坛上讨论。您的问题还涉及许多不同的领域。我建议您首先关注一个特定区域——尤其是模式。一旦架构被寻址,您就可以开始定义您希望提供的接口。
和 "doesn't seem to work well" 之类的评论没有用。唯一了解任何细节的人是您。
此时,您的架构在 tabStoreExec 和 tabStoricoDetail 之间实现了 M:M 关系。为了子孙后代的爱,真的真的给你的命名标准一些考虑。您不需要一个命名标准,其中对象类型是每个名称 IMO 的第一部分。也不知道 "StoreExec" 是什么意思。 /咆哮
但在继续之前,解释一下为什么你创建了 table "Union"(另一个糟糕的命名选择)。该连接点 table 是用于实现 M:M 关系的机制。这是有原因的吗?你改变主意了吗?还有其他困难吗?
如果您想要 1:M 关系,您应该删除 table 并简单地将 tabStoricoDetail 中的外键列添加到 tabStoreExec。我建议您检查 Microsoft 为演示 SQL 服务器功能而创建的示例数据库 - AdventureWorks and World Wide Importers。 AdventureWorks 最初是为 2005 版开发的,但仍然是一个常见的参考。使用这些是如何定义架构的示例。
我有一个数据库 SQL 没有很好地实现和一些问题。
1.the fk 似乎效果不佳我必须进行单独的查询以在所有 table 中添加一个值,
第一个table它很奇怪但是是正确的,它必须与其他标签分开(我必须添加,取消,修改)同时在标签tabList和tabSE中。
我要实现 tabSE 和 tabSD 之间的关系 1:N(不知道该怎么做)实际上目标是 select(形成 c# bla bla bla) 一堆项目,单击开始并存储在 mm/dd/yyyy 我已经开始项目的信息(通过单击 buttonStart),id (1,5,3,6,8) 为example 和 start 得到了一个结果 bla bla bla,它在 mm/dd/yyyy 那天结束了。我认为也许 Union 是没有意义的,从 tabSD 可能 NomeI 不必存在,不知道。帮助
从上到下:
如果您在 tabStoreExec 和 tabStoricoDetail 之间有 FK,您可以自动执行的唯一两件事是 UPDATE 和 DELETE 与关键字(或选项配置 table)CASCADE
我想这是一个 "temporary" table 用作界面实用程序的后盾。
制作1:N。我认为最好的是 delete table Union,然后你必须 在 tabStoricoDetail 上创建一个复合键,例如 id 和 idDetail,并让 FK 完成他的工作,只链接两个 tables:
的 idtabStoreExec.idSE -> tabStoricoDetail.id
我给你一些 CREATE TABLES 代码示例,可以按你的意愿工作:
CREATE TABLE tabStoreExec (
idSE INT --PRIMARY KEY --Coul be done here, but can't be named
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, DateStarSE DATE --or DATETIME, depends if you want the time too
, DateEndSE DATE
, CONSTRAINT PK_tabStoreExec PRIMARY KEY (id)
, CONSTRAINT FK_tabStoreExec_idSE_id FOREIGN KEY (idSE) REFERENCES tabStoricoDetail(id) ON DELETE CASCADE ON UPDATE CASCADE --use this in case you want to propagate the delete/update action from this table to referenced.
);
CREATE TABLE tabStoricoDetail (
id INT
, idDetail INT
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, resItemDet VARCHAR(100)
, CONSTRAINT PK_tabStoricoDetail PRIMARY KEY (id, idDetail)
);
希望对您有所帮助。
编辑: 是的,联盟table可以消失
FK是两个table之间的"connector",它给你数据完整性,复合PK就是可以有1:N关系。我在这里给你一个示例架构以获得更好的帮助:
Sample Schema
一般来说,您应该 post 只回答一个问题,而不是多个问题。这样的post很难在论坛上讨论。您的问题还涉及许多不同的领域。我建议您首先关注一个特定区域——尤其是模式。一旦架构被寻址,您就可以开始定义您希望提供的接口。
和 "doesn't seem to work well" 之类的评论没有用。唯一了解任何细节的人是您。
此时,您的架构在 tabStoreExec 和 tabStoricoDetail 之间实现了 M:M 关系。为了子孙后代的爱,真的真的给你的命名标准一些考虑。您不需要一个命名标准,其中对象类型是每个名称 IMO 的第一部分。也不知道 "StoreExec" 是什么意思。 /咆哮
但在继续之前,解释一下为什么你创建了 table "Union"(另一个糟糕的命名选择)。该连接点 table 是用于实现 M:M 关系的机制。这是有原因的吗?你改变主意了吗?还有其他困难吗?
如果您想要 1:M 关系,您应该删除 table 并简单地将 tabStoricoDetail 中的外键列添加到 tabStoreExec。我建议您检查 Microsoft 为演示 SQL 服务器功能而创建的示例数据库 - AdventureWorks and World Wide Importers。 AdventureWorks 最初是为 2005 版开发的,但仍然是一个常见的参考。使用这些是如何定义架构的示例。