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

时间:2019-04-02 07:50:36

标签: sql-server ddl

我的数据库SQL实施得不好,并有几个问题。

1。fk似乎运行不佳,我必须进行单独的查询才能在所有表中添加一个值,

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

  2. 我必须在tabSE和tabSD之间实现一个1:N关系(不知道该怎么做)实际上目标是选择(形成C#bla bla bla)一堆项目,然后单击开始并存储信息,例如在一天mm / dd / yyyy中我已经启动了项(通过单击buttonStart),其ID为(1,5,3,6,8),并且开始时有结果bla bla bla,今天结束了mm / dd / yyyy。我认为,也许Union毫无意义,从tabSD来看,也许Nome我不必存在,也不知道。帮助

2 个答案:

答案 0 :(得分:1)

从上到下:

  1. 如果您在tabStoreExec和tabStoricoDetail之间有一个FK,则只能自动进行的两项操作是 UPDATE DELETE (使用关键字配置表) CASCADE

  2. 我想这是一个用作接口实用程序的“临时”表。

  3. 用于制作1:N。我认为最好是删除表Union ,然后必须在tabStoricoDetail 上创建一个组合键,例如id和idDetail,然后让FK使其工作仅链接两个表的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)
); 

我希望这对您有帮助。

编辑: 是的,联合表可以消失。

FK是两个表之间的“连接器”,它为您提供了数据完整性,并且复合PK将具有1:N的关系。我在这里为您提供示例架构,以寻求更好的帮助:

Sample Schema

答案 1 :(得分:0)

通常来说,您应该将帖子限制在一个问题上,而不是多个问题。这样的帖子很难在论坛上讨论。您的问题还涉及许多不同领域。我建议您首先关注特定领域-特别是架构。一旦确定了架构的地址,就可以开始定义要提供的接口。

诸如“似乎工作不正常”之类的注释没有用。唯一了解任何细节的人都是您。

这时,您的架构实现了tabStoreExec和tabStoricoDetail之间的M:M关系。为了对子孙后代的热爱,请确实考虑一下您的命名标准。您不需要命名标准,其中对象类型是每个IMO名称的第一部分。不知道“ StoreExec”是什么意思。 / Rant

但是在进一步说明之前,请解释为什么创建表“ Union”(另一个糟糕的命名选择)。该联结表是用于实现M:M关系的机制。有这个原因吗?你改变主意了吗?还有其他困难吗?

如果要建立1:M关系,则应删除该表,而只需将tabStoricoDetail中的外键列添加到tabStoreExec。建议您检查Microsoft为演示SQL Server功能而创建的示例数据库-AdventureWorks and World Wide Importers。 AdventureWorks最初是针对2005版开发的,但仍是通用参考。使用这些是如何定义架构的示例。