如何将 1:1 关系转换为 1:N 关系

How to convert a 1:1 relation into a 1:N relation

我有一个数据库 SQL 没有很好地实现和一些问题。

1.the fk 似乎效果不佳我必须进行单独的查询以在所有 table 中添加一个值,

  1. 第一个table它很奇怪但是是正确的,它必须与其他标签分开(我必须添加,取消,修改)同时在标签tabList和tabSE中。

  2. 我要实现 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 不必存在,不知道。帮助

从上到下:

  1. 如果您在 tabStoreExec 和 tabStoricoDetail 之间有 FK,您可以自动执行的唯一两件事是 UPDATEDELETE 与关键字(或选项配置 table)CASCADE

  2. 我想这是一个 "temporary" table 用作界面实用程序的后盾。

  3. 制作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 版开发的,但仍然是一个常见的参考。使用这些是如何定义架构的示例。